nodeJS require.paths解决问题

时间:2011-03-22 12:04:13

标签: javascript node.js relative-path require commonjs

我正在尝试相对神秘地要求一个文件发生以下情况

这很好用,指向/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"

呢?

提前致谢

3 个答案:

答案 0 :(得分:17)

<强>更新:

来自documentation

  

前缀为'/'的模块是文件的绝对路径。对于   例如,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(不再支持):

来自documentation

在节点中,require.paths是一个字符串数组,表示当模块没有前缀'/''./'或{{1}时要搜索模块的路径}。

(强调我的)

答案 1 :(得分:5)

您可以使用NODE_PATH

传递该内容

示例:

NODE_PATH=`pwd` node app.js

答案 2 :(得分:3)

我创建了一个名为“ rekuire ”的新节点模块

它允许您在不使用相对路径的情况下“需要”

在测试/重构时节省了大量时间

  

https://npmjs.org/package/rekuire

超级易用