Fedora 33 - npm存在两个版本的问题

Fedora 无法通过dnf module install nodejs:14安装新版本的nodejs。

尝试通过npm更新ndoejs,首先更新npm

>sudo cnpm install npm@latest -g
...
All packages installed (used 31ms(network 29ms), speed 0B/s, json 0(0B), tarball 0B)
[[email protected]] link /usr/bin/npm@ -> /usr/lib/node_modules/npm/bin/npm-cli.js
[[email protected]] link /usr/bin/npx@ -> /usr/lib/node_modules/npm/bin/npx-cli.js
> npm -v
6.14.8
> which npm
/usr/local/bin/npm
> /usr/bin/npm -v
7.11.1
> which cnpm
/usr/local/bin/cnpm
> cnpm -v
[email protected] (/usr/local/lib/node_modules/cnpm/lib/parse_argv.js)
[email protected] (/usr/local/lib/node_modules/cnpm/node_modules/npm/lib/npm.js)
[email protected] (/usr/bin/node)
[email protected] (/usr/local/lib/node_modules/cnpm/node_modules/npminstall/lib/index.js)
prefix=/usr 
linux x64 5.11.15-200.fc33.x86_64 
registry=https://r.npm.taobao.org

发现有两个版本的npm同时存在,路径不同。

/usr/bin/npm 是新版本

/usr/local/bin/npm 是旧版本

为什么存在两个版本?难道是因为我用了zsh?

检查~/.zshrc,发现有一行内容

# If you come from bash you might have to change your $PATH.
export PATH=$HOME/bin:/usr/local/bin:$PATH

原本第二行是注释的,我是从bash(fedora默认用bash)转为zsh,所以把注释去掉。

检查环境变量

> echo $PATH
/home/ydx/bin:/usr/local/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/ydx/bin:/home/ydx/Dev/flutter/bin

可以看到/usr/local/bin的位置在/usr/bin之前。所以zsh先找到旧版本的npm。但是为什么npm更新时它自己不会更新所有软连接?

检查npm命令的真实位置

> ls -la /usr/local/bin | grep npm
lrwxrwxrwx.  1 root root       33 Jan 25  2020 cnpm -> ../lib/node_modules/cnpm/bin/cnpm
lrwxrwxrwx.  1 root root       38 Sep 18  2020 npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxrwxrwx.  1 root root       38 Sep 18  2020 npx -> ../lib/node_modules/npm/bin/npx-cli.js
> ls -la /usr/bin | grep npm
lrwxrwxrwx   1 root root           38 Apr  6 23:06 npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxrwxrwx   1 root root           38 Apr  6 23:06 npx -> ../lib/node_modules/npm/bin/npx-cli.js
> /usr/local/bin/npm -v
6.14.8
> /usr/bin/npm -v
7.11.1

妈呀,两个npm指向的是同一个地方啊!!仔细一看,其实不是同一个地方。因为目的地用的是../相对路径。

那么我只需要删除旧版本的node_modules,系统就能找到新的有效的npm命令。剩下坏掉的无效的软链接,后面再看怎么删除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章