13

我一直在研究如何在 NodeJS 和浏览器应用程序中应用各种模块概念,使用 NodeJS 要求(显然是在 NodeJS 应用程序中)和 RequireJS 用于 Web 浏览器环境。

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

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

一种是同步的,一种是异步的。我的第一个想法是利用异步语法,然后为 NodeJS 定义一个自定义模块,它简单地同步调用异步回调。但是,如果不首先使用 NodeJS 同步回调,如何将 RequireJS-emulator 包含到跨环境模块中呢?

4

4 回答 4

10

请参阅这篇文章:弥合 Node.js 和浏览器之间的模块差距

于 2011-11-25T01:20:26.683 回答
1

另请参阅https://github.com/umdjs/umd上的样板集

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

于 2011-11-25T07:10:48.027 回答
1

http://uRequire.org项目弥补了AMDnodejs / commonJs格式的差距。U 可以写入其中之一(或两者),并执行/部署到两者中的任何一个standalone.js.

于 2013-08-23T23:34:32.383 回答
1

在此处查看此资源:这并不难:使您的库支持 AMD 和 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() {
    }
})

还有一件事,我发现这个通用模块定义GitHub 项目适用于所有变体实现,您可以全部查看

于 2018-11-29T11:01:24.343 回答