JavaScript 模块是否能够兼容 NodeJS 和 RequireJS?

13
我一直在探索如何将各种模块概念应用于使用NodeJS require(显然是在NodeJS应用程序中)和RequireJS用于Web浏览器环境的应用程序中。
随后我想到,有些模块可能对客户端和服务器应用程序都有用,因此可以重复使用。
如何开发模块,使它们与这两个环境兼容?
一个是同步的,一个是异步的。我的第一个想法是利用异步语法,然后为NodeJS定义一个自定义模块,简单地同步调用异步回调。但是,在没有首先使用NodeJS同步回调的情况下,如何将RequireJS仿真器包含在跨环境模块中?
4个回答


1

http://uRequire.org 项目可以连接 AMDnodejs / commonJs 格式之间的差距。您可以使用其中任意一种(或两种),并且可以执行/部署到任何一种standalone.js


1

请参阅https://github.com/umdjs/umd中的模板集。

关于异步与同步--对于Node中的define(),通常只使用工厂函数同步执行。这就是在Node中运行时requirejs的工作方式。


1

请查看此资源: it's Not Hard: Making Your Library Support AMD and CommonJS,它解释得非常清楚。

我将发布你需要的代码摘要,但是要理解所有内容,您应该阅读该文章

通过此代码,您可以为您的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() {
    }
})

还有一件事,我发现了这个通用模块定义GitHub项目,包含所有变体的实现,你可以查看它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接