在NodeJS应用程序中设置NODE_PATH

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

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

我发现几个解决scheme都不能按预期工作。

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

在另一个stackoverflow文章中被build议,但是这会导致在较新的节点版本中的错误消息,并NODE_PATH开发人员使用NODE_PATH

相反,我试图做我的程序的第一行以下。

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

这不会导致错误消息,但它也不起作用。 我认为这个variables是在应用程序启动时读取的,而不是在稍后重新读取时才读取的。

你可以从源代码中find所有的信息: module.js

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

search_nodeModulePaths函数:模块实例具有通用的Array对象paths ,其中包含所有查找path。

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

所以现在,如果你在./foo-baz/some-lib-name/下有必要的模块,它会被正确地拾取。

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