我一直在调查各种模块概念如何在NodeJS和浏览器应用程序中应用NodeJS需要(显然在NodeJS应用程序中)和RequireJS用于Web浏览器环境。
然后我突然意识到某些模块可能对客户端和服务器应用程序都有用,因此可以重复使用。
如何开发模块以使它们与这两种环境兼容?
一个是同步的,一个是异步的。我的第一个想法是利用异步语法,然后为NodeJS定义一个自定义模块,它只是同步调用异步回调。但是,在没有首先使用NodeJS同步回调的情况下,如何将RequireJS模拟器包含到跨环境模块中?
答案 0 :(得分:10)
答案 1 :(得分:1)
另见https://github.com/umdjs/umd
的样板组关于异步与同步 - 对于Node中的define(),通常只使用传递给定义的工厂函数的同步执行。这就是在Node中运行时requirejs的工作方式。
答案 2 :(得分:1)
http://uRequire.org项目弥补了 AMD &的差距。 nodejs / commonJs 格式。你可以写入(或两者),并执行/部署到任意两个或standalone.js
。
答案 3 :(得分:0)
在此处检查此资源:it's Not Hard: Making Your Library Support AMD and CommonJS它很好地解释了所有内容
我将发布take-away code you need
,但to understand
应该发布的所有内容read that article
通过此代码,您为js库添加了AMD(requireJs)和Node支持
(function (global, factory) {
if (typeof define === 'function' && define.amd)
define(['jQuery'], function ($) {
return (global['toaster'] = factory($))
});
else if (typeof module === "object" && module && typeof module.exports === "object")
module.exports = (global['toaster'] = factory(require('jquery')));
else global['toaster'] = factory(global['jQuery']);
})(this, function ($) {
// implementation goes here
var myModule = {};
return myModule;
function helper() {
}
})
还有一件事情,我发现这个Universal Module Definition GitHub项目中的所有变体实现都可以全部检查