问题 在NodeJS应用程序中设置NODE_PATH


我们有一个节点项目,它不需要我们自己的子模块来自相对路径,而是需要 NODE_PATH 环境变量设置为 lib 找到所有子模块。

我想在程序源代码中处理这个标准情况,但现在看来它是不可能的。

我找到了几个解决方案都没有按预期工作。

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

在另一个stackoverflow文章中建议但这会在较新的Node版本中导致错误消息并引导开发人员使用 NODE_PATH

相反,我尝试将以下内容作为我程序的第一行。

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

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


10756
2017-07-25 10:12


起源

process.env ['NODE_PATH'] =“./ lib”替换NODE_PATH的内容,不添加。也许那是你的问题。如果你使用process.env ['NODE_PATH'] + =“:./ lib”而不是它应该工作 - txwikinger
我看到NODE_PATH编程设置在工作进程中工作,如果它是在主进程中设置的。对于主进程本身,它根本不起作用。 - Dmitrii Sorin


答案:


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

... NODE_PATH 仅在访问via时抛出错误 require.paths

搜索 _nodeModulePaths function:模块实例具有通用的Array对象 paths,包含所有查找路径。

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

所以现在,如果你有所需的模块 ./foo-baz/some-lib-name/ 它会被正确地拿起来。

你有什么节点版本和系统?


11
2017-07-25 19:56