9

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

这很好用,这表明/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"

反正?

提前致谢

4

3 回答 3

17

更新:

文档中:

带有前缀的模块'/'是文件的绝对路径。例如,require('/home/marco/foo.js')将在 /home/marco/foo.js.

带有前缀的模块'./'是相对于文件调用require(). 也就是说,circle.js必须在与 for 相同的目录中foo.js才能 require('./circle')找到它。

如果没有前导 '/' 或 './' 来指示文件,则该模块要么是“核心模块”,要么是从node_modules文件夹加载的。

如果给定的路径不存在,require()将抛出一个code属性设置为的错误'MODULE_NOT_FOUND'


这是原始答案,指的是require.paths(不再支持):

文档中:

在 node 中,require.paths是一个字符串数组,表示当模块没有以 、 或 为前缀时要搜索路径。'/''./''../'

(强调我的)

于 2011-03-22T13:43:39.387 回答
6

您可以使用NODE_PATH

例子:

NODE_PATH=`pwd` node app.js
于 2011-11-10T17:42:57.513 回答
3

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

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

在测试/重构方面,它可以节省大量时间。

https://npmjs.org/package/rekuire

于 2013-03-28T10:07:15.647 回答