Node.js 为什么从另一个目录中的文件请求(“模块”)失败?
当我执行Node.js 为什么从另一个目录中的文件请求(“模块”)失败?,node.js,npm,Node.js,Npm,当我执行节点myfile.js时,我得到一个错误,没有找到模块。我检查了模块。路径如下: $ node > module.paths 显示模块安装的路径,我可能需要模块: $ node > require("the-module") 因此,我将console.log(module.path)添加到myfile.js以查看module.path是否相同。事实并非如此 发生了什么事 编辑: 这有点复杂 模块路径不同,但这似乎不是问题所在。安装模块的路径在列表中 当我在myfile.
节点myfile.js
时,我得到一个错误,没有找到模块。我检查了模块。路径
如下:
$ node
> module.paths
显示模块安装的路径,我可能需要模块:
$ node
> require("the-module")
因此,我将console.log(module.path)
添加到myfile.js
以查看module.path
是否相同。事实并非如此
发生了什么事
编辑: 这有点复杂
模块路径不同,但这似乎不是问题所在。安装模块
的路径在列表中
当我在myfile.js
中添加require(“模块”)
时,它会按预期工作。然而,我确实require(“c:/path to/other file.js”)
并且从那里我做了另一个require(“模块”)
。这一要求失败了
编辑2:
module.path
是other file.js
是不同的。为什么?(安装模块的路径不在此列表中。)您可以看到当未指定完整路径时,require()
如何加载文件的所有规则
当您只指定一个文件名时,如在require(“模块”)
中所述,node.js会在加载当前调用的require()
模块的目录下的node\u modules子目录中查找。通过这种方式,模块可以拥有自己的依赖项集,并且可以相对于自己的目录加载依赖项集,而无需考虑它在文件系统中的位置
因此,如果您从c:\myprojects\team\module1
中调用require()
类似地,任何以/
开头的路径都是相对于同一目录的,但允许您引用同一目录中的文件
node.js不会将路径动态添加到搜索路径列表中。听起来你有一种期望,当你访问不同的目录时,它们会以某种方式自动添加到搜索路径中。这就是它的工作原理。require()
查找相对路径的位置规则都已详细说明
另外,请记住,在所有node.js中,不仅仅只有一个模块
变量。在node.js中加载的每个文件中都有一个不同的路径,因此模块中的路径很可能不同。实际上,大多数node.js开发人员从未以任何方式使用module.path
。如果您只需遵循require()
的相对路径工作规则,您将得到您所期望和需要的