是否有任何命令行工具可以将单个JavaScript文件分成多个较小的文件?

时间:2012-02-15 10:22:37

标签: javascript command-line automation

如果我有一个巨大的JavaScript文件,我想找到一个工具,例如,通过指定MAX_SIZE自动将该文件转换为一组较小的文件。

这种工具是否存在?实现这样的工具会很容易吗?

2 个答案:

答案 0 :(得分:1)

我不认为这样的工具存在,并且尝试创建一个工具将是一个巨大的蠕虫。您显然无法以特定大小分解代码,因为这很可能发生在某个函数或其他函数的中间。因此,这样的工具需要能够解析javascript以便不破坏它。更糟糕的是,不能保证不同文件中的函数彼此之间有任何关系。一个文件中的函数可能依赖于在任意数量的其他文件中定义的常量和函数,而这些函数又依赖于其他文件,从而导致巨大的混乱。

如果您需要将代码分解为较小的文件,请开始对语义相关的函数进行分组并从中形成类,并确定它们对其他文件的依赖性。这只能由人类程序员完成。

答案 1 :(得分:0)

我同意之前的回答,逻辑细分应由程序员完成。 另外,我想在将文件分成更多文件而没有删除任何内容方面没有任何优势,因为你只会获得一些网络传输开销。

顺便说一下,回答问题而不问...... 实际上你可以。

大多数常见的JS库都是由一个巨大的对象声明构成的,实际上是一个顶级语句脚本,如

libraryname = {
    fn1: function() { /* do something */ },
    fn2: function() { /* do something else */ },
    fn3: function() { /* do something else */ }
}

这就是为什么你不能轻易地将文件拆分成两个有效的脚本文件的原因。

如果在执行之前重新组合,代码可以被分割成非js有效块。 只需将代码拆分为多个文本文件,单独检索它们,然后按正确的顺序连接字符串,然后将其加载到页面中。 加载它可以通过多种方式完成,具体取决于您想要完成的任务。 您可以创建一个新的脚本元素并将其附加到head元素,也可以在其上调用eval。

代码可能看起来像这样(即使它可以被优化):

function loadScript(name, n) {
    var chunks = new Array(n);
    for(var i=0; i<n; i++)
        chunks[i] = getChunk(name, i); // simple blocking ajax call retrieving chunk content
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.innerHTML = chunks.join('');
    document.getElementsByTagName('head')[0].appendChild(script);
}