我正在尝试让节点识别安装在构建环境的非典型目录中的 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目录的正确方法是什么?
答案 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的回答。