2016-11-14 1 views
1

j'ai un fichier js avec la structure suivante:debundle code de navigateur unique dans les fichiers originaux

define("example/example", ["exports", "example/something", "example/other", "ex/sthg"], function(e, t, n, a, r) { 
    e["default"] = {something: 'example'} 

}), define("examle/module", ["exports"], function(e) { 
    /// 
}), define("examle/module2", ["exports"], function(e) { 
    // and so on... 
}), require("example/sthg")["default"].callSomething({ 
    // 
}); 

Je suis à la recherche d'un moyen de décompresser ce fichier dans les fichiers originaux, comme example/example.js, example/module, example/module2 etc.

J'ai essayé browser-unpack, mais sans effet, donc je suppose qu'il n'est pas livré avec browserify. La syntaxe est similaire à AMD ou RequireJS.

Existe-t-il un fichier de débogage comme ça?

+0

Je doute de cela. Comment un script de dégroupage sait-il où se termine un fichier et où commence un autre? – Liam

Répondre

0

Solution rapide de singe, qui m'aide assez - il crée l'arbre de modules avec la liste d'importation et function(e, t, n... comme contenu de dossier. Peut-être que ça peut être utile pour quelqu'un. Dans mon cas, il peut être complètement déballé (bien sûr seulement js, pas jsx), mais je ne veux pas jouer avec les parsers js.

var fs = require('fs'); 
var path = require('path'); 
var mkdirp = require('mkdirp'); 

const defineArgs = ['e', 't', 'n', 'a', 'r'] 
function parseFunction(func, deps) { 
    let funcStr = func.toString(), 
     depsArr = [], 
     depsStr = '' 

    // just to know what etnar is 
    for(let i in deps) { 
     if(deps[i]!='exports') { 
      depsArr.push('const ' + defineArgs[i] + ' = require("' + deps[i] + '")') 
     } 
    } 

    depsStr = depsArr.join('\n') 

    return depsStr + '\n' + funcStr 
} 
// override define 
var define = function(filename, deps, func) { 
    console.log(filename + ': ' + deps) 
    let outPath = 'src/' + filename + '.js', 
     outDir = path.dirname(outPath), 
     out = parseFunction(func, deps) 

    try { 
     fs.lstatSync(outDir) 
    } catch (e) { 
     mkdirp(outDir, function(err) { if(err){console.error(err)} }) 
    } 

    fs.writeFile(outPath, out, function(err) { 
     if(err){console.error(err)} 
    }) 
} 
// paste your script below and run this via node 
// define("example/example", ["exports", "example/something", .......