Node.js require() vs RequireJS?

Node.js require() vs RequireJS?

本文关键字:vs RequireJS js require Node      更新时间:2023-09-26

Hello with 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,假设我们出于任何原因都不能…

我在node针对RequireJS的require方法中看到的另一个不足之处是设置路径映射的能力,如果我在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'   

您可以使用browserfy注册别名,这样就可以覆盖您的重命名。

至于你的根绝对路径,那真的不可能做到。如前所述,modul8具有名称空间机制来解决这一问题。

我建议你在freenode上的#stackvm中乒乓SubStack,然后直接问他。

它可能对您有帮助,也可能对您没有帮助,但我相信Dojo Frameworks AMD Loader是与RequireJS兼容的API,并且如果您使用新的微内核,则不会污染全局命名空间。

我相信它现在在全局命名空间中只有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模块之间提供了一个"桥梁",而无需重新设计轮子(它是在这两个标准的基础上构建的)。它基本上将模块从AMD或commonJS格式转换为在nodejs&浏览器。

它还使用灵活的路径约定转换依赖路径,因此您可以使用'../../foo''bar/foo',这取决于您所在位置的意义。

您的AMD或UMD模块在浏览器上异步加载(使用AMD/requireJs或其他AMD加载程序),在节点上也模拟异步require(['dep1', 'dep2'], function(dep1,dep2){...})