sudo下的npm无法升级-sudo npm -v 与 npm -v版本号是不一样的

1 篇文章 0 订阅
1 篇文章 0 订阅

快上线了发现环境有问题。。。

发现问题

新增了一个上传文件的功能,用到strongloop,需要npm install strongloop依赖包,但是到线上测试安装时,发现总是报错:

npm ERR! typeerror Error: Missing required argument #1
npm ERR! typeerror     at andLogAndFinish (/usr/lib/node_modules/npm/lib/fetch-package-metadata.js:31:3)
npm ERR! typeerror     at fetchPackageMetadata (/usr/lib/node_modules/npm/lib/fetch-package-metadata.js:51:22)
npm ERR! typeerror     at resolveWithNewModule (/usr/lib/node_modules/npm/lib/install/deps.js:455:12)
npm ERR! typeerror     at /usr/lib/node_modules/npm/lib/install/deps.js:456:7
npm ERR! typeerror     at /usr/lib/node_modules/npm/node_modules/iferr/index.js:13:50
npm ERR! typeerror     at /usr/lib/node_modules/npm/lib/fetch-package-metadata.js:37:12
npm ERR! typeerror     at addRequestedAndFinish (/usr/lib/node_modules/npm/lib/fetch-package-metadata.js:82:5)
npm ERR! typeerror     at returnAndAddMetadata (/usr/lib/node_modules/npm/lib/fetch-package-metadata.js:117:7)
npm ERR! typeerror     at pickVersionFromRegistryDocument (/usr/lib/node_modules/npm/lib/fetch-package-metadata.js:134:20)
npm ERR! typeerror     at /usr/lib/node_modules/npm/lib/fetch-package-metadata.js:109:7
npm ERR! typeerror This is an error with npm itself. Please report this error at:
npm ERR! typeerror     <http://github.com/npm/npm/issues>
npm ERR! Linux 4.14.77-70.59.amzn1.x86_64
npm ERR! argv "/home/ec2-user/.nvm/versions/node/v10.4.0/bin/node" "/usr/bin/npm" "install" "strongloop"
npm ERR! node v10.4.0
npm ERR! npm  v3.8.6
npm ERR! code EMISSINGARG

可以注意到npm的version是 v3.8.6,版本已经很老了!因为上线前,有一个相同环境配置的预部署服务器做对比,预服务器上安装都是ok的,就是npm的version是最新的。综合查的一些资源,都是建议升级npm版本。

所以! 我们需要升级!!

出状况了

先看下npm版本号:
sudo 下版本号为3.8.6
直接npm,版本号为6.4.0

[root@ ec2-user]# sudo npm -v
3.8.6

[root@ ec2-user]# npm -v
6.4.1

执行升级后,仍然,没有升级sudo npm,只是npm -v改变了

[root@ ec2-user]# sudo npm install npm -g
/home/ec2-user/.nvm/versions/node/v10.4.0/bin/npm -> /home/ec2-user/.nvm/versions/node/v10.4.0/lib/node_modules/npm/bin/npm-cli.js
/home/ec2-user/.nvm/versions/node/v10.4.0/bin/npx -> /home/ec2-user/.nvm/versions/node/v10.4.0/lib/node_modules/npm/bin/npx-cli.js
+ npm@6.14.5
updated 1 package in 6.051s

[root@ec2-user]# sudo npm -v
3.8.6

[root@ ec2-user]# npm -v
6.14.5

这不难受么!不管我是执行 sudo npm install npm -g 还是npm install npm -g 结果都是一样的!
sudo npm -v 下的版本号一直不变!!!

怎么解决呢

头脑风暴一下!
npm装哪里的呢?
which 命令!

[root@ec2-user]# which npm
/root/.nvm/versions/node/v10.4.0/bin/npm
看到这里只是一个软链,我们看看软链的地址

[root@ec2-user]# ll /root/.nvm/versions/node/v10.4.0/bin/npm
lrwxrwxrwx 1 root root 38 Jun 30 03:44 /root/.nvm/versions/node/v10.4.0/bin/npm -> ../lib/node_modules/npm/bin/npm-cli.js


[root@ec2-user]# sudo which npm
/bin/npm

[root@ec2-user]# ll /bin/npm
lrwxrwxrwx 1 root root 38 Sep 23  2018 /bin/npm -> ../lib/node_modules/npm/bin/npm-cli.js

到了这里,我们大胆猜想一下!
npm工具实质上就是一个nodejs的脚本,我们用它来管理node模块,Fedora包管理器安装的npm和全局安装处理的方式差不多,在/bin/npm生成了lib/node_modules/bin/npm-cli.js的软链接,我们的npm就是它!!
好!那是不是我们把/bin/npm 软链到,高版本的npm的js文件上,就ok了呢?

测试一下,软链一个新文件: /bin/kikitest
[root@ec2-user]# ln -s /root/.nvm/versions/node/v10.4.0/lib/node_modules/npm/bin/npm-cli.js /bin/kikitest
[root@ec2-user]# ll /bin/kikitest 
lrwxrwxrwx 1 root root 68 Jun 30 07:18 /bin/kikitest -> /root/.nvm/versions/node/v10.4.0/lib/node_modules/npm/bin/npm-cli.js

见证奇迹的时刻了!!
成功了!!! 我们可以这么玩,而且这样之后,安装都是ok的!
[root@ ec2-user]# sudo /bin/kikitest -v
6.14.5

ok!好似解决了!尝试一下,安装strongloop

[root@ec2-user]# sudo /bin/kikitest install strongloop

结果是成功的!!!‘’

当下是这么解决的,重定向一下/bin/npm的软链!

[root@ec2-user]# rm -rf /bin/npm
[root@ec2-user]# ln -s /root/.nvm/versions/node/v10.4.0/lib/node_modules/npm/bin/npm-cli.js /bin/npm

解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值