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

如何将javascript模块集成到一个文件中进行部署?,javascript,module,integration,loading,code-organization,Javascript,Module,Integration,Loading,Code Organization,在开发方面,我使用JS模块来更好地组织代码。例如,我有module1.js,module2.js,这两个模块都包含在main.js中 然而,我也使用GoogleClosure编译器进行代码优化,它需要一个集成的javascript文件 这个问题最简单的解决方案是将函数与调用这些函数的程序部分一起编译 因此,我想将所有模块集成到一个js文件中,然后使用googleclosure编译器进行编译。LabJS在客户端运行,不会在服务器端完成任务。那么,有什么工具来完成这项工作吗?或者是否有其他库支持服务

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

然而,我也使用GoogleClosure编译器进行代码优化,它需要一个集成的javascript文件

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


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

理论上,您可以使用一个简单的实用程序(如。*)将文件连接在一起。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"
还有,你考虑过第二种解决方案吗?为此,您需要通过闭包“导出”被标记为死代码的符号,这与创建具有相同名称的全局变量一样简单:

window['LAB'] = $LAB;
最好的方法取决于需要包含多少函数,以及编译后是否要求Javascript保持分离(一些复杂的库在集成到第三方代码中时效果不佳)。

我发现它提供了一个优化工具,可以

将相关脚本合并到构建层中,并通过UglifyJS(默认)或闭包编译器(使用Java时的选项)缩小它们

在文档中,对于包含以下导入
one.js
two.js
two.js
main.js
页面:

require([“一”、“二”、“三”],函数(一、二、三){
});

这个优化工具可以将它们压缩成一个完整的文件


node.././r.js-o name=main-out=main-build.js baseUrl=。

我也考虑过这个问题。但是,由于有许多页面使用不同的模块,而且这些功能肯定会随着开发而更新、更改和删除。因此,关闭时导出功能对于维护来说是痛苦的。手动连接的方式对我来说并不枯燥。你当然不会手动连接。作为部署脚本的一部分:“cat js/main.js/module1.js/module2.js>compiled.js”,然后您只需针对生成的“compiled.js”文件运行闭包生成器。两个步骤(连接->编译)过程是一种选择。我还发现RequireJS附带了一个优化工具,它可以在一个命令中执行这两个步骤。如果在不同的页面上加载不同的模块,则更好的解决方案。值得一看。
window['LAB'] = $LAB;