在NodeJS应用程序中设置NODE_PATH

use*_*458 12 node.js

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

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

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

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

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

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

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

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

ten*_*its 11

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

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

搜索_nodeModulePaths功能:模块实例具有通用的Array对象paths,其中包含所有查找路径.

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

所以现在,如果您拥有所需的模块,./foo-baz/some-lib-name/那么它将被正确地拾取.

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