是否可以使JavaScript模块兼容NodeJS和RequireJS?

时间:2011-11-25 01:07:32

标签: javascript node.js module requirejs commonjs

我一直在调查各种模块概念如何在NodeJS和浏览器应用程序中应用NodeJS需要(显然在NodeJS应用程序中)和RequireJS用于Web浏览器环境。

然后我突然意识到某些模块可能对客户端和服务器应用程序都有用,因此可以重复使用。

如何开发模块以使它们与这两种环境兼容?

一个是同步的,一个是异步的。我的第一个想法是利用异步语法,然后为NodeJS定义一个自定义模块,它只是同步调用异步回调。但是,在没有首先使用NodeJS同步回调的情况下,如何将RequireJS模拟器包含到跨环境模块中?

4 个答案:

答案 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项目中的所有变体实现都可以全部检查