如何将javascript模块集成到一个文件中进行部署?

时间:2011-11-13 16:58:56

标签: javascript module integration loading code-organization

在开发方面,我使用JS模块来更好地组织我的代码。例如,我有module1.jsmodule2.js这两个模块都包含在main.js LABjs

$LAB
.script("module1.js").wait()
.script("module2.js").wait();

但是,我还使用Google Closure Compiler进行代码优化,它需要根据documentation集成的javascript文件。

  

解决这个问题的最简单方法是将函数与调用这些函数的程序部分一起编译。

所以我想将所有模块集成到一个js文件中,然后可以使用Google Closure Compiler进行编译。 LabJS在客户端运行,不会在服务器端完成任务。那么有什么工具可以完成这项工作吗?或者是否有其他库支持服务器端模块集成?

2 个答案:

答案 0 :(得分:1)

我发现RequireJS提供了一个可以

的优化工具
  

将相关脚本组合到构建层中,并通过UglifyJS(默认值)或Closure Compiler(使用Java时的选项)缩小它们。

在文档中,对于包含以下导出main.jsone.jstwo.js的{​​{1}}的网页:

three.js

此优化工具可以将它们压缩为一个集成文件

require(["one", "two", "three"], function (one, two, three) { });

答案 1 :(得分:0)

理论上,您可以使用cat这样的简单实用程序将文件连接在一起。 * .js文件只是Javascript的一部分,并且(假设它们都没有语法错误),它们可以像* .txt文件一样拼接在一起。您可以在每次部署时执行此操作,因此输入文件可以保持分离,并且针对生成的工件运行closurebuilder。 e.g。

compile-js:
  // Concatenate the input files
  cat js/main.js js/module1.js js/module2.js > generated/intermediate.js
  // Compile the optimised output
  closurebuilder.py \
    --root=closure-library/ \
    --root=generated/ \
    --namespace="myproject.start"

另外,您考虑过第二种解决方案吗?为此,你需要" export" Closure标记为死代码的符号,就像创建具有相同名称的全局变量一样简单:

window['LAB'] = $LAB;

最好的方法取决于您需要包含多少函数,以及在编译后是否需要Javascript保持分离(某些复杂的库在集成到第三方代码时不能很好地发挥作用)。