将单个浏览器js代码解压缩为原始文件

时间:2016-11-14 14:17:25

标签: javascript requirejs webpack amd commonjs

我有一个具有以下结构的js文件:

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({
    //
});

我正在寻找一种方法将此文件解压缩为原始文件,例如example/example.jsexample/moduleexample/module2等。

我已经尝试了browser-unpack,但没有效果,所以我认为它并没有与browserify捆绑在一起。语法类似于AMDRequireJS

还有什么可以去解压缩这样的文件吗?

1 个答案:

答案 0 :(得分:0)

快速猴子解决方案,它足够帮助我 - 它创建带有导入列表的模块树和function(e, t, n...作为文件内容。也许它对某人有用。在我的情况下,它可以完全拆分(当然只有js,而不是jsx),但我不想玩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", .......