在NodeJS应用程序中设置NODE_PATH

12

我们有一个Node项目,它不需要从相对路径引用我们自己的子模块,而是需要设置NODE_PATH环境变量为lib以查找所有子模块。

我想在程序源代码中处理这个标准情况,但目前看来似乎不可能。

我发现了几种解决方案,但都不能像预期那样工作。

module.paths.push("./lib");

在另一篇stackoverflow文章中建议使用此方法,但这会导致新版本的Node出现错误消息,并指导开发人员使用NODE_PATH

相反,我尝试在我的程序的第一行做以下操作。

process.env['NODE_PATH']="./lib";

这不会导致错误消息,但也不起作用。我认为这个变量是在应用程序启动时读取的,而不是在后面需要东西时读取的。


1
process.env['NODE_PATH']="./lib" 会替换 NODE_PATH 的内容,而不是添加到它后面。也许这就是你的问题所在。如果你使用 process.env['NODE_PATH']+=":./lib" ,那么它应该能够工作。 - txwikinger
我所看到的是,如果在主进程中设置了NODE_PATH编程设置,则它可以在工作进程中运行。对于主进程本身,它根本不起作用。 - Dmitrii Sorin
1个回答

11

您可以从源代码中找到所有信息:module.js

...NODE_PATH 错误仅在通过require.paths访问时抛出。

搜索 _nodeModulePaths 函数:模块实例具有通用的数组对象paths,其中包含所有查找路径。

module.paths.unshift('./foo-baz');
var x = require('some-lib-name');
console.log(x);

现在,如果你有要求的模块在 ./foo-baz/some-lib-name/ 下面,它将被正确地识别。

你使用的是哪个Node版本和什么操作系统?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接