【问题标题】:Is it possible to make JavaScript module compatible with both NodeJS and RequireJS?是否可以使 JavaScript 模块与 NodeJS 和 RequireJS 兼容?
【发布时间】:2012-01-06 00:42:02
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript node.js module requirejs commonjs


    【解决方案1】:

    【讨论】:

    • 感谢您的快速回复,非常有帮助!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        在此处查看此资源: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 项目的所有变体实现,你可以全部查看

        【讨论】:

          猜你喜欢
          • 2012-05-28
          • 2012-12-18
          • 2018-11-11
          • 2020-11-06
          • 2014-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多