我正在尝试相对神秘地要求一个文件发生以下情况
这很好用,指向/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
任何人都知道为什么我不能在这种情况下使用./
来加载路径
require("path").resolve("/Users/marcos/Desktop/Taper/lib", "./utils")
结果:
"/Users/marcos/Desktop/Taper/lib/utils"
呢?
提前致谢
答案 0 :(得分:17)
<强>更新:强>
前缀为
'/'
的模块是文件的绝对路径。对于 例如,require('/home/marco/foo.js')
将加载文件/home/marco/foo.js
。前缀为
'./'
的模块与调用require()
的文件有关。 也就是说,circle.js
必须与foo.js
位于同一目录中require('./circle')
找到它。如果没有前导'/'或'./'来表示文件,模块就是 “核心模块”或从
node_modules
文件夹加载。如果给定路径不存在,
require()
将抛出错误 其code
属性设置为'MODULE_NOT_FOUND'
。
这是原始答案,引用require.paths
(不再支持):
在节点中,require.paths
是一个字符串数组,表示当模块没有前缀'/'
,'./'
或{{1}时要搜索模块的路径}。强>
(强调我的)
答案 1 :(得分:5)
您可以使用NODE_PATH
示例:
NODE_PATH=`pwd` node app.js
答案 2 :(得分:3)
我创建了一个名为“ rekuire ”的新节点模块
它允许您在不使用相对路径的情况下“需要”
在测试/重构时节省了大量时间
超级易用