在评估开发人员可用于使用 javascript 模块、模块加载器和构建工具的各种方法的过程中,我想要一些关于您使用哪些工具以及为什么使用的建议。
我目前正在寻求能够:
- 鼓励模块化代码 -
允许根据给定模块的必要性添加功能 [认为 mixins/inheritance]
- 生成包含开发版本的 BUILD,并且至少是具有不同层的生产版本(例如,我想要一个包含我的引导代码、模块 1、2 和 3 的层 [一个脚本];然后是另一个包含模块 4、5 和 6 的层。这样我可以推迟加载代码基于应用程序中实际发生的情况。) -
在带宽极低的情况下工作 [当为生产而构建时],xfer 速度为 1kbps 和高延迟(考虑最坏情况下通过 GPRS 的移动连接以获得图片)。
我已经看到了以下内容:使用原型继承,如:
myNS.thing = function(){};
myns.thing.prototype = {
something: "foo"
}
可以通过简单地获取此脚本的内容并将其附加到下一个想要包含在生产优化包中作为单个脚本的内容来构建。在这种情况下,加载程序是基于已知文件的简单脚本标签注入/评估或类似的。
我还看到了其他方法,例如:
function(){
return function(){
something: "foo"
}
}();
构建它已经变得更加复杂,因为必须操作脚本,删除包装自执行函数并将返回值组合到一个对象中。我不知道使用可用构建工具的“简单”方法。加载器方法的工作方式与上述相同。
这两种方法都缺乏依赖性。
然后我们有 AMD:
define("mymodule", ["dep1"], function(dep1){
return {something: dep1}
});
有些人可能会对它的缩进和“仪式”感到恶心,但它仍然非常有效,google 闭包编译器本身就知道它,它知道依赖关系,并且似乎已被广泛采用。有很多可用的模块加载器(https://docs.google.com/spreadsheet/ccc?key=0Aqln2akPWiMIdERkY3J2OXdOUVJDTkNSQ2ZsV3hoWVE#gid=2)和不少构建工具。
您还知道哪些其他选项,或者您见过在生产中使用过哪些选项?
如前所述,我对代码语法、加载器工具和构建工具的组合感兴趣。这三个必须存在并且可以正常协同工作。剩下的就是我不感兴趣的学术练习。