在评估可供开发人员使用 javascript 模块、模块加载器和构建工具的各种方法的过程中,我想就您使用的工具及其原因提供一些建议。
我目前正在寻找能够:
-鼓励模块化代码
-允许根据需要向给定模块添加功能[考虑混合/继承]
- 生成一个包含开发版本的构建版本,并且至少是一个具有不同层的生产版本(比如,我想要一个包含我的 Bootstrap 代码、模块 1、2 和 3 的层 [脚本];然后是另一个层包含模块 4、5 和 6。这样我就可以根据应用程序中实际发生的情况推迟代码的加载。)
- 在带宽极低的情况下工作 [当为生产而构建时],xfer 速度为 1kbps 和高延迟(考虑通过 GPRS 进行最坏情况的移动连接以获得图片)。
我看过以下内容: 使用原型(prototype)继承,如:
myNS.thing = function(){};
myns.thing.prototype = {
something: "foo"
}
可以通过简单地获取此脚本的内容并将其附加到下一个想要作为单个脚本包含在生产优化包中的脚本来构建。在这种情况下,加载程序是简单的脚本标记注入(inject)/评估或类似的,基于已知文件。
我还看到了其他方法,例如:
function(){
return function(){
something: "foo"
}
}();
构建它已经变得更加复杂,因为必须操纵脚本,删除包装的自执行函数并将返回值组合到一个对象中。我不知道使用可用构建工具的“简单”方法。加载程序方法与上述相同。
这两种方法都缺乏依赖性。
然后我们有 AMD:
define("mymodule", ["dep1"], function(dep1){
return {something: dep1}
});
有些人可能会对它的缩进和它的“仪式”感到恶心,但它仍然非常有效,谷歌闭包编译器本身就知道它,它知道依赖关系,并且似乎已被广泛采用。有一堆模块加载器可用 (https://docs.google.com/spreadsheet/ccc?key=0Aqln2akPWiMIdERkY3J2OXdOUVJDTkNSQ2ZsV3hoWVE#gid=2) 和相当多的构建工具。
您还知道哪些其他选项,或者您见过在生产中使用过哪些选项?
如前所述,我对代码语法、加载器工具和构建工具的组合很感兴趣。这三个必须存在并正确地协同工作。其余的是我不感兴趣的学术练习。
最佳答案
我个人使用 RequireJS,一种 AMD 解决方案。如果我要进行快速的概念验证,我不会费心去设置它,但我现在知道的最常见的源/dep 映射解决方案包括:
- 需要JS
- 通用JS
- 谷歌关闭
- YepNope(一个条件加载器,可以与其他加载器结合使用)
我已经启动了一个样板文件,它结合使用 Require 和 Backbone 来清除所有丑陋的设置代码:
https://github.com/nick-jonas/assemblejs
因此,您可以键入 assemble init
来构建基本项目,并键入 assemble build
来运行编译器并获得最终的生产就绪构建。
关于javascript - 创建工具链的方法比较 : JS modules/loader/build,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14280019/