根据documentation,Node.js默认搜索以下位置:
Path specified in the NODE_PATH environment variable .
注意:NODE_PATH环境变量设置为以冒号分隔的绝对路径列表 .
Current node_modules folder. (当地)
$HOME/.node_modules (全球)
注意:$ HOME是用户的主目录 .
$HOME/.node_libraries (全球)
$PREFIX/lib/node (全球)
注意:$ PREFIX是Node.js配置的node_prefix .
要检查 node_prefix 的当前值,请运行:
node -p process.config.variables.node_prefix
注意:前缀对应于构建期间的--prefix param,它与process.execPath相关 . 不要混淆npm config get prefix command.source的值
如果找不到给定的模块,则表示它不存在于上述位置之一中 .
安装模块的全局根文件夹的位置可以通过以下方式打印: npm root -g (默认情况下,路径在运行时计算,除非在npmrc file中重写) .
解决方案
您可以尝试以下变通方法:
在 NODE_PATH 环境变量中指定全局模块位置 . 例如 .
echo 'require("forever")' | NODE_PATH="$(npm root -g):$NODE_PATH" node
要测试并打印 NODE_PATH 的值,请运行:
echo 'console.log(process.env.NODE_PATH); require("forever")' | NODE_PATH="$(npm root -g):$NODE_PATH" node
要获得更持久的解决方案,请通过运行以下命令将 $HOME/.node_modules 全局用户文件夹链接到指向根文件夹:
ln -vs "$(npm root -g)" "$HOME"/.node_modules
然后通过: echo 'require("forever")' | node 命令重新测试它 .
在调用脚本之前,临时将当前文件夹更改为全局安装扩展的位置 . 例如 .
npm install -g forever
cd "$(npm root -g)"
echo 'require("forever")' | node
cd -
在npm userconfig file(请参阅: npm help 5 npmrc )或 userconfig param( --prefix )中配置全局安装目标 .
要显示当前配置,请运行: npm config list .
要编辑当前配置,请运行: npm config edit .
在调用 require() 时指定node modules location的完整路径 . 例如 .
require("/path/to/sub/module")
将包安装到自定义位置,例如
npm install forever -g --prefix "$HOME"/.node_modules
但是,安装将在 ~/.node_modules/lib/node_modules/ 下,因此仍需要添加位置 .
Create a symlink在当前文件夹中从全局包的位置 . 例如 .
npm link forever