Node.js require()vs RequireJS?
你好与RequireJS我可以设置一个基本path是这样的: base : './app/'
所以当我在./app/foo/bar/
例如,我有一个脚本,我使用require('foo');
然后RequireJS将search./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,让我们说,我们不能以任何理由…
在RequireJS中,我在节点的require方法中看到的另一个缺乏的特性是设置path映射的能力,如果我在RequireJS中有一个名为./app/super-sized-directory-name/
的目录,我可以简单地执行'big-dir' : 'super-sized-directory-name'
,然后我可以简单地使用require('./app/big-dir/foo')
和Node.js的require方法,这是不可能的,据我所知…
--alias, -a Register an alias with a colon separator: "to:from" Example: --alias 'jquery:jquery-browserify'
您可以使用browserify注册别名,以覆盖您的重命名。
至于你根深蒂固的绝对path,那是不可能完成的。 如上所述, modul8
有一个名称空间机制来解决这个问题。
我build议你在freenode的#stackvm中使用pong SubStack并直接询问他。
它可能会也可能不会帮助你,但是我相信Dojo框架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
使用uRequire ,它在nodejs require
和AMD define
模块之间提供了一个“桥梁”,而不require
重新发明轮子(它build立在两个标准之上)。 它基本上将模块从AMD或commonJS格式转换为在nodejs和浏览器上运行顺畅的其他格式或UMD 。
它也用灵活的path约定来转换依赖path,所以你可以有'../../foo'
或者'bar/foo'
这取决于你所处的位置。
您的AMD或UMD模块在浏览器上asynchronous加载(使用AMD / requireJs或其他AMD加载程序),并在节点上asynchronousrequire(['dep1', 'dep2'], function(dep1,dep2){...})
也模拟。