NODE_PATH对module.paths或查找模块没有影响

时间:2015-09-16 19:24:09

标签: javascript node.js module

我正在尝试让节点识别安装在构建环境的非典型目录中的 grunt 节点模块,但更新NODE_PATH没有任何效果:

$ env | grep NODE
NODE_PATH=/home/colbblai/.nvm/v0.10.38/lib/node_modules
$ export NODE_PATH=$NODE_PATH:/foo
$ env | grep NODE
NODE_PATH=/home/colbblai/.nvm/v0.10.38/lib/node_modules:/foo
$ which node
/home/colbblai/.nvm/v0.10.38/bin/node
$ node
> module.paths
[ '/mnt/colbblailx.old/home/colbblai/src/repl/node_modules',
  '/mnt/colbblailx.old/home/colbblai/src/node_modules',
  '/mnt/colbblailx.old/home/colbblai/node_modules',
  '/mnt/colbblailx.old/home/node_modules',
  '/mnt/colbblailx.old/node_modules',
  '/mnt/node_modules',
  '/node_modules' ]
> 

/ foo 添加到NODE_PATH,我希望它在module.paths中。是什么赋予了?从命令行添加node_modules目录的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

在 Unix 上(不是在 Windows 上),如果应该安全地处理节点二进制文件,则来自不安全环境变量的某些条目不会包含在 module.paths 数组中。

更准确地说,如果节点二进制文件具有 set-user-ID 或 set-group-ID 或具有功能,则源自环境变量 HOME 和 NODE_PATH 的条目将不会包含在 module.paths 数组中。这是以下三个路径:

$NODE_MODULES
$HOME/.node_modules
$HOME/.node_libraries

因此,您可以将在 foo 中找到的模块放在 /mnt/colbblailx.old/home/colbblai/src/node_modules(或类似位置)中的某个位置,或者切换到既没有 setuid 也没有功能的节点二进制文件。

有关更多详细信息,请参阅我对this question的回答。