Linux环境下使用N工具安装Node.js的正确配置及REPL全局包引用问题
相关配置变量说明
$N_PREFIX:n包管理器专属配置,定义n安装Node.js版本、存放全局npm包的根目录,你当前设置为$HOME/.n是无sudo权限安装的标准正确配置。$PREFIX:Node.js/npm原生的全局路径前缀变量,未单独配置时会自动继承$N_PREFIX的值,你执行npm config get prefix返回/home/tooster/.n属于正常生效状态。$NODE_MODULES:已废弃的历史配置变量,早期Node.js用于指定全局模块搜索路径,当前所有维护中的Node.js版本均不再支持该变量,无需配置。.../lib/node_modules:当前版本npm全局安装包的默认存放路径,你目录中的$N_PREFIX/lib/node_modules就是所有全局包的实际存储位置,npm安装的全局包、附带的可执行文件软链接都会指向该路径下的对应文件。.../lib/node:Node.js v0.x版本遗留的全局模块存放路径,属于兼容性保留路径,当前版本Node.js已经不再使用该路径存储任何文件,仅在模块搜索逻辑中保留了该路径作为兼容项。
问题根源
REPL的模块搜索路径列表中,和全局相关的路径只有遗留的$N_PREFIX/lib/node,但你的全局包实际存储在$N_PREFIX/lib/node_modules,路径不匹配导致无法正常require全局安装的包。
修复方案
你当前的基础配置($N_PREFIX和PATH的设置)本身就是n的标准正确配置,只需要补充全局模块搜索路径的配置即可,两种方案均可:
- 官方推荐方案(无任何副作用)
在~/.bashrc的Node配置段添加NODE_PATH环境变量,指向实际的全局包存放路径:
# setup NODE export N_PREFIX="$HOME/.n" export PATH=$N_PREFIX/bin:$PATH export NODE_PATH="$N_PREFIX/lib/node_modules"
修改后执行source ~/.bashrc即可生效,后续REPL和临时编写的脚本都可以正常require全局安装的包。
2. 软链接兼容方案
执行以下命令创建软链接,适配Node的遗留搜索路径:
ln -s $N_PREFIX/lib/node_modules $N_PREFIX/lib/node
该方案也没有后遗症,仅利用Node的兼容搜索逻辑,后续全局包的安装、升级、卸载操作都不受影响。
内容的提问来源于stack exchange,提问作者Tooster
相关产品推荐
相关产品推荐

