如何在远程服务器更新指定版本npm?更新后版本显示异常求助
这种情况我之前也碰到过,结合你用的超老版本Node.js(v0.10.48),核心原因主要有两个,咱们一步步拆解:
1. 版本兼容性不匹配(最关键)
npm v5.6.0完全不支持Node.js v0.10.x系列版本。你可以回想下安装过程中有没有跳过警告?npm从v3开始就逐步放弃对Node 0.10的适配,到v5版本时已经彻底不兼容了。表面上终端显示“更新完成”,但实际上很多核心依赖安装失败,新的npm根本没法正常替换旧版本。
2. PATH路径优先级导致调用旧版本
就算兼容性没问题,也可能是新安装的npm不在系统PATH的优先搜索位置里。旧版本npm大概率是跟着Node.js一起装在系统全局目录(比如/usr/bin/npm),而你直接用npm install npm@5.6.0安装的新npm会默认放在用户本地目录(比如~/.npm-packages/bin),系统会优先调用PATH里靠前的旧版本,所以你运行npm -v还是显示老版本。
具体解决步骤
第一步:先升级Node.js(必须操作)
Node.js v0.10.48已经停止维护快8年了,不仅npm没法正常升级,还存在大量未修复的安全漏洞。建议先升级到支持npm v5.6.0的Node版本,比如Node.js v6.x(LTS长期支持版本,刚好完美兼容npm 5.x):
- 先卸载旧版本Node.js和npm:
# 如果你是Debian/Ubuntu系统用apt安装的 sudo apt-get remove nodejs npm # 如果你是CentOS/RHEL系统用yum安装的 sudo yum remove nodejs npm - 用nvm(Node版本管理器,推荐)安装Node.js v6.x:
安装完成后,默认的npm版本会是v3.x,这时候再升级到v5.6.0就不会有兼容性问题了。curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash # 重启终端后执行以下命令 nvm install 6.17.1 nvm use 6.17.1
第二步:正确全局升级npm到v5.6.0
在Node.js升级到v6.x之后,执行带-g参数的全局安装命令,确保新npm被安装到系统优先搜索的位置:
npm install -g npm@5.6.0
之后运行npm -v,就能看到版本号变成5.6.0了。
特殊情况:必须保留Node v0.10.48(不推荐)
如果因为业务限制必须保留Node v0.10.48,那你只能安装兼容这个版本的npm,比如npm v2.15.11(这是支持Node 0.10的最后一个npm版本):
npm install -g npm@2.15.11
不过还是强烈建议你升级Node.js,旧版本的安全风险真的很高。
内容的提问来源于stack exchange,提问作者Sebastián

