Javascript Node.js require()与RequireJS?

Javascript Node.js require()与RequireJS?,javascript,node.js,require,requirejs,Javascript,Node.js,Require,Requirejs,您好,使用RequireJS,我可以设置如下基本路径:base:'./app/'所以当我在/app/foo/bar/中时,例如,我有一个使用require('foo')的脚本RequireJS然后会搜索/app/foo.js,而不是在node\u module文件夹或/app/foo/bar/foo.js中。如果您有一种结构,作为开发人员,您可以更清楚地看到依赖项,而不是。/../foo.js。我可以有/app/foo.js和/app/foo/foo.js和/app/foo/bar/foo.js

您好,使用RequireJS,我可以设置如下基本路径:
base:'./app/'
所以当我在
/app/foo/bar/
中时,例如,我有一个使用
require('foo')的脚本
RequireJS然后会搜索
/app/foo.js
,而不是在
node\u 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'   
您可以使用browserify注册别名,以便涵盖重命名

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


我建议您在freenode上的stackvm中使用SubStack,并直接询问他。

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

我相信它现在在全局名称空间中只有
require()
define()

无论如何,他们处理这一问题的方法是:

require(["dojo/node!util"], function(util){
    // Module available as util
});
该文档处于

使用状态,它在nodejs
require
和AMD
define
模块之间提供了一个“桥梁”,而无需重新设计轮子(它构建在两个标准之上)。它基本上将模块从AMD或commonJS格式转换为其他格式,或者在NodeJ和浏览器上都能顺利运行

它还使用转换依赖路径,因此您可以使用
'../../foo'
'bar/foo'
,具体取决于您所处的位置


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

通过域支持此功能,但语法与节点不兼容。我相信browserify只支持相对文件paths@Raynos你好谢谢你的回复!为了让我的观点更清楚,我改变了问题,我将从第一眼看到模块8,它似乎比browserify更复杂,我喜欢browserify的地方是,它可以即时编译脚本,也可以接受咖啡,这非常有趣cool@Raynos我再次检查了模块8,并更仔细地阅读了它的文档。我相信它非常酷,也许是我想要的!现在我将测试它:)模块8处理咖啡。至于动态编译,构建一个小型的,如果动态编译是指中间件,不要这样做。预编译并静态服务。
require('backbone')
如果npm安装正确,应该可以工作。如果没有,则会引发Module8的github问题。browserify或Module8是否异步工作?如果不是的话,在我看来,requirejs至少仍然有权用于浏览器中使用的模块。@Brucer它们是异步工作的,这意味着它们不会阻塞。它们通过预加载所有模块来工作,所以在节点项目中您更喜欢使用browserify而不是requirejs?