Можно ли сделать модуль JavaScript совместимым как с NodeJS, так и с RequireJS? - PullRequest
11 голосов
/ 25 ноября 2011

Я изучал, как различные концепции модулей могут применяться в NodeJS и приложениях браузера с использованием требований NodeJS (очевидно, в приложениях NodeJS) и RequireJS для среды веб-браузера.

Затем меня осенило, что некоторые модули могут быть полезны для использования как клиентскими, так и серверными приложениями и, следовательно, могут использоваться повторно.

Как можно разработать модули, чтобы они были совместимы с обеими этими средами?

Один является синхронным, а другой - асинхронным. Моей первой мыслью было использовать асинхронный синтаксис, а затем определить собственный модуль для NodeJS, который просто синхронно вызывает асинхронный обратный вызов. Но как включить RequireJS-эмулятор в модуль кросс-среды без предварительного синхронного обратного вызова NodeJS?

Ответы [ 4 ]

10 голосов
/ 25 ноября 2011
1 голос
/ 24 августа 2013

Проект http://uRequire.org устраняет пробелы в форматах AMD & nodejs / commonJs . U может писать в любом (или в обоих) и выполнять / развертывать в любой из двух или standalone.js.

1 голос
/ 25 ноября 2011

См. Также набор шаблонов в https://github.com/umdjs/umd

Об асинхронном и синхронном - для define () в Node, обычно используется только синхронное выполнение фабричной функции, переданной для определения.Так работает requirejs при работе в Node.

0 голосов
/ 29 ноября 2018

проверьте этот ресурс здесь: это не сложно: поддержка вашей библиотеки AMD и CommonJS это все очень хорошо объясняет Я выложу take-away code you need, но to understand все, что вам нужно read that article

этим кодом вы добавили поддержку AMD (requireJs) и Node для своей библиотеки js

(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 для всех вариантов реализации вы можете проверить их все

...