管理多个 Node.js 版本(nvm管理多个node,每个版本的node都有自己的npm,不和其他node共享)
node的版本是很重要的,Ubuntu上APT源的nodejs更新太慢,(22版Ubuntu的默认版本nodejs,在2025年初,vue创建新项目都会失败…前端变化就这么快吗?)建议不要用APT安装nodejs
建议使用:nvm(可以管理node版本) https://github.com/nvm-sh/nvm
# Mac上测试,是可以安装的 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash # 重开一下 Terminal 或者 source <bashrc>(Mac的话是zsh) ubuntu@instance-20250106-1816:~/djwcb$ nvm --version 0.40.1
这个安装脚本做了什么呢?将 nvm clone 到 ~/.nvm,然后配置用户的 <bashrc>(The script clones the nvm repository to ~/.nvm, and attempts to add the source lines from the snippet below to the correct profile file (~/.bashrc, ~/.bash_profile, ~/.zshrc, or ~/.profile).)
# nvm 基础命令(来自官方文档) $ nvm use 16 Now using node v16.9.1 (npm v7.21.1) $ node -v v16.9.1 $ nvm use 14 Now using node v14.18.0 (npm v6.14.15) $ node -v v14.18.0 $ nvm install 12 Now using node v12.22.6 (npm v6.14.5) $ node -v v12.22.6 # node版本更换后,npm版本应该也是自动更换的吧(待确认:是的,每个node用自己的npm,不共享)
# 本人常用的命令 nvm ls # 查看安装了哪些版本(system表示系统自带的node) nvm ls-remote # 查看可安装的版本 nvm install 22.14.0 # 安装某个特定版本 nvm use 22.14.0 # 切换 node 版本,可以看到,node 版本切换之后,npm也会切换 # node 的安装路径 momoka@Momokas-Mac-mini ~ % which node /Users/momoka/.nvm/versions/node/v22.14.0/bin/node # npm 的安装路径 momoka@Momokas-Mac-mini ~ % which npm /Users/momoka/.nvm/versions/node/v22.14.0/bin/npm # npm 全局包的安装路径 momoka@Momokas-Mac-mini ~ % npm root -g /Users/momoka/.nvm/versions/node/v22.14.0/lib/node_modules
每个版本的node的全局package都是独立管理的(包括npm,因为npm自己也是一个node package),实验如下:
anny@annys-MacBook-Air ~ % nvm use 22 Now using node v22.14.0 (npm v10.9.2) anny@annys-MacBook-Air ~ % npm --version 10.9.2 anny@annys-MacBook-Air ~ % npm list -g /Users/anny/.nvm/versions/node/v22.14.0/lib ├── corepack@0.31.0 └── npm@10.9.2 anny@annys-MacBook-Air ~ % nvm use 23 Now using node v23.10.0 (npm v10.9.2) anny@annys-MacBook-Air ~ % npm --version 10.9.2 anny@annys-MacBook-Air ~ % npm list -g /Users/anny/.nvm/versions/node/v23.10.0/lib ├── @anthropic-ai/claude-code@1.0.64 ├── corepack@0.32.0 └── npm@10.9.2
自己的想法:
python的包里面,有需要编译的部分(C代码),所以python包在发布时候,会针对不同的python版本,发布不同的版本,类似:python3.8-xxx1.1-amd64.whl(AI:在 Python 的 pip 包管理 中,每个 Python 版本 通常需要单独发布对应的包,而不是像 npm 那样共用同一个包。)
但是 node 的包就是纯 js 代码(大部分情况),所以,一个 node 包会限定兼容的 node 范围,但是不会为每一个 node 版本都单独打一次包,一个 node 包就类似 xxx1.1(AI:npm 包的代码和依赖是独立于 Node.js 版本的,开发者通常只需要发布一个包,而不是针对不同的 Node.js 版本发布多个版本。尽管 npm 包本身可以跨 Node.js 版本使用,但某些包可能需要某些 Node.js 版本的特性。开发者可以在 package.json 里 声明支持的 Node.js 版本,这样 npm 会自动检查是否兼容。)安装的时候的 node 环境也不重要。比如,安装到工程里面的 node 包,只会记录包的版本,之后只要使用适合的 node 版本就能运行。