我一直在研究CommonJs,AMD,模块加载和相关问题一周以上。我觉得什么都没有我需要的东西。我的基本需求是在前端和后端之间无缝共享代码。围绕此问题存在各种问题,包括客户端的模块格式,脚本加载和模块格式转换/包装。我最近一直在努力的部分是如何在node.js中使用CommonJS和AMD(或类似AMD的东西)。
你无法摆脱node.js中的commonJs,所以我的想法是,如果我想使用AMD,它必须与commonJs一起工作。我可以使用哪些工具,库或技术来获得类似AMD的工作?
例如,我希望能够编写这样的模块:
var x = require('x')
modules.exports = function(a, callback) {
if(a) {
require(['y','z'], function(y,z) {
callback(x, y.o + z.k)
}
} else {
callback(x, "ok")
}
}
理想情况下:
module
或require
不需要明确传递给类似amd的require函数答案 0 :(得分:2)
uRequire是满足此要求的完美工具,它完全取决于模块格式与其不兼容性之间的互操作性。
本质上,uRequire将模块从nodejs转换或转换为AMD,反之亦然,加上在nodejs和浏览器上运行的UMD格式,或者在浏览器上不需要AMD加载器的组合。
虽然这需要一个构建步骤,但与产品相比,这是一个小问题。
答案 1 :(得分:1)
你可以结账,http://dojotoolkit.org/documentation/tutorials/1.9/node/ 我只玩了一点,但是和我尝试过的一样。我让它与node-orm一起工作,并记住这是一个痛苦的开始,但可能只是让我在玩它时弄得一团糟。
基本上你最终会在服务器上使用AMD,例如:
require(["dojo/node!orm","other/amd/module"], function(orm){
//use third party commonjs module and your own amd modules here
}
看起来你已经调查了Requirejs建议将commonjs模块包装在AMD需求中(在构建期间自动使用r.js)。