Node.js требуют () против RequireJS? - PullRequest
6 голосов
/ 21 января 2012

Здравствуйте, с RequireJS. Я могу установить базовый путь следующим образом: base : './app/', поэтому, когда я нахожусь в ./app/foo/bar/, например, и у меня есть скрипт, в котором я использую require('foo'); RequireJS, тогда будет искать ./app/foo.js, а не вПапка node_module или ./app/foo/bar/foo.js это удобно, когда у вас есть некая структура, в которой вам, как разработчику, было бы намного удобнее видеть зависимости вместо того, чтобы иметь ../../foo.js.Я мог бы иметь ./app/foo.js и ./app/foo/foo.js и ./app/foo/bar/foo.js, было бы намного чище иметь:

require('foo');
require('foo/foo');
require('foo/bar/foo');

, а не:

require('../../foo');
require('../foo');
require('./foo');

Теперь вы можете сказать, почему бы и нетизмените имя и не используйте foo везде, допустим, что мы не можем по какой-либо причине…

Еще один недостаток, который я вижу в методе require узла по сравнению с RequireJS, - это возможность установки сопоставления пути, если я имеюкаталог с именем ./app/super-sized-directory-name/ в RequireJS, который я мог бы просто сделать 'big-dir' : 'super-sized-directory-name', а затем я мог бы просто использовать require('./app/big-dir/foo') с методом require Node.js, насколько я знаю, это невозможно…

Ответы [ 3 ]

2 голосов
/ 22 января 2012
--alias, -a    Register an alias with a colon separator: "to:from"
             Example: --alias 'jquery:jquery-browserify'   

Вы можете зарегистрировать псевдонимы с browserify, чтобы охватить ваше переименование.

Что касается ваших укоренившихся абсолютных путей, это не может быть сделано на самом деле. Как уже упоминалось, modul8 имеет механизм имен для решения этой проблемы.

Я бы порекомендовал вам понг SubStack в #stackvm на freenode и напрямую его спросить.

0 голосов
/ 21 октября 2013

Используйте uRequire , который обеспечивает «мост» между модулями nodejs require и AMD define, не изобретая колесо (оно построено на основе двух стандартов). Он в основном конвертирует модули из формата AMD или commonJS в другой формат или UMD , который без проблем работает как на nodejs, так и в браузере.

Он также транслирует пути зависимостей с соглашениями о гибких путях , поэтому вы можете иметь либо '../../foo', либо 'bar/foo' в зависимости от того, что имеет больше смысла в точке, в которой вы находитесь.

Ваши модули AMD или UMD загружаются асинхронно в браузер (с использованием AMD / requireJ или другого загрузчика AMD), а на узле также моделируется асинхронный require(['dep1', 'dep2'], function(dep1,dep2){...}).

0 голосов
/ 07 апреля 2013

Это может или не может помочь вам, но я считаю, что Dojo Frameworks AMD Loader совместим с API с RequireJS, и если вы используете новое микроядро, не загрязняет глобальное пространство имен.

Я полагаю, что в глобальном пространстве имен теперь только require() и define().

В любом случае, их метод борьбы с этим - сделать что-то вроде:

require(["dojo/node!util"], function(util){
    // Module available as util
});

Документация на http://dojotoolkit.org/reference-guide/1.8/dojo/node.html

...