nodeJS require.paths解决问题
我正试图要求一个相对而且神秘的文件,下面正在发生
这适用于/Users/marcos/Desktop/Taper/lib/utils.js
myPath = "/Users/marcos/Desktop/Taper/lib/./utils"; require(myPath);
这不,但它应该指向完全相同的文件:
require.paths.unshift("/Users/marcos/Desktop/Taper/lib") require("./utils"); //Doesn't work with './' require("utils"); //Works Fine
任何人都知道为什么我不能使用./
在这种情况下加载path
require("path").resolve("/Users/marcos/Desktop/Taper/lib", "./utils")
结果是:
"/Users/marcos/Desktop/Taper/lib/utils"
无论如何?
提前致谢
更新:
从文档 :
以
'/'
为前缀的模块是文件的绝对path。 例如,require('/home/marco/foo.js')
将加载文件/home/marco/foo.js
。以
'./'
为前缀的模块与调用require()
的文件相关。 也就是说,circle.js
必须和require('./circle')
foo.js
在同一个目录下才能find它。如果没有前导'/'或'./'来表示文件,模块可能是“核心模块”,或者是从
node_modules
文件夹加载的。如果给定的path不存在,
require()
会将其code
属性设置为'MODULE_NOT_FOUND'
的错误。
这是原始的答案,它是指require.paths
(不再支持):
从文档 :
在节点中, require.paths
是一个string数组,表示当模块没有以'./'
或'../'
作为前缀时要被search的path。
(重点是我的)
你可以使用NODE_PATH
来传递它
例:
NODE_PATH=`pwd` node app.js
我创build了一个名为“ rekuire ”的新节点模块
它允许你在不使用相对path的情况下“需要”
它在testing/重构方面节省了大量的时间
超级好用