Node版本管理最佳实践

最近遇到一个关于 Node 版本的问题,解决过程中我重新认识了一下 Node 的版本管理,分享一下经历。

背景 - 我们的 iOS 工程提交代码是使用了一个叫 Commitizen 的工具,这是一个标准化 git commit message 的工具,这个工具我之前是用过 npm install -g 方式进行全局安装的。

问题 - 今天使用 Commitizen 下的 git cz 命令的时候突然报错说这个命令找不到了。

git: ‘cz’ is not a git command.

很奇怪,然后我在终端下执行 commitizen 命令,发现这个命令也找不到了…

于是我想到昨天似乎在起别的前端项目的时候执行过一句 nvm alias default 这个命令改过 Node 的版本号码,是不是和这个有关系?

既然报错找不到 commitizen 了,那我就重新装一下,于是重新执行命令 npm install -g commitizen发现了似乎安装过程和版本号有关系,是把 commitizen 装到了指定的 node 版本号下的目录中去了。

ios-project git:(develop) npm install -g commitizen /Users/x/.nvm/versions/node/v14.21.3/bin/cz -> /Users/x/.nvm/versions/node/v14.21.3/lib/node_modules/commitizen/bin/git-cz /Users/x/.nvm/versions/node/v14.21.3/bin/git-cz -> /Users/x/.nvm/versions/node/v14.21.3/lib/node_modules/commitizen/bin/git-cz /Users/x/.nvm/versions/node/v14.21.3/bin/commitizen -> /Users/x/.nvm/versions/node/v14.21.3/lib/node_modules/commitizen/bin/commitizen

  • commitizen@4.3.0 added 168 packages from 184 contributors in 22.24

我昨天确实是通过 nvm alias default 命令把 Node 版本改到了 v14.21.3,改之前我的 Node 版本是 v14.16.1, 于是我在 /Users/x/.nvm/versions/node/v14.16.1/bin 下确实找到了 commitize,所以应该就是通过 nvm alias default 改了全局的 Node 版本号,导致找不到原来 Node 版本下的 commitizen 了。之前确实也没有关注到通过 npm install -g 这个命令还会区分不同的 Node 版本进行安装。

回到昨天为什么要通过 nvm alias default 修改全局 Node 版本?是因为昨天运行一个前端项目报错,然后同事建议修改 Node 版本。

使用 VSCode 开启前端项目的时候一般会有两个地方执行 npm run dev 这种命令

  1. IDE 界面交互(应该是读取的 package.json 中的命令,变为可交互形式)。

    vscode

  2. 在 VSCode 自带的命令行

这两个地方执行命令的时候使用的 Node 版本是不一样的,IDE 界面那儿使用的是全局的 Node 版本,而我总是通过 IDE 交互这样执行命令,同事建议我通过 nvm alias default 命令将 Node 版本改成和前端工程匹配的 Node 版本。于是就引出了今天的问题,主要还是我自己没有搞清楚 Node 全局版本和工程下版本的区别。 而且尽量在前端工程下尽量使用命令行的方式去执行 npm 命令。

所以我简单总结一下 Node 版本管理的比较好的实践是:

  1. 尽量不要通过 nvm alias default 命令改 Node 全局的版本,因为会影响很多别的地方的使用。
  2. 在前端工程下如果当前系统默认 Node 版本不匹配,手可以通过 nvm use 的方式进行版本切换,并尽量保证是通过命令行执行 npm 命令。

关注我的微信公众号,我在上面会分享我的日常所思所想。