使用 Volta 管理工具
前言
近两年,我都是使用 volta 管理 node 版本 和为项目锁定 yarn 版本。没遇到什么大问题,最近了解了 corepack
后,打算切换成 fnm
+ corepack
管理 node 版本和包管理工具。
安装
Volta 在 Linux/Mac 下通过 shell 脚本安装, Windows 下通过 exe 安装。安装后续,都需要配置下环境变量。
shell 配置
oh-my-zsh
的话, 可以 volta completions zsh > ~/.oh-my-zsh/completions/_volta
, omz 会自动加载。
特色
- 可以管理 node 版本和包管理工具
- 可以管理全局安装的 npm 包
- 实验性的支持 pnpm
项目固定版本
volta pin
可以固定 node, npm, yarn 版本, 会在 package.json
中生成volta
字段, 以后使用 volta install
安装包的时候,会使用这个版本。
这里可以看到 github 中所有使用 volta
的项目: context:global “volta” file:package.json - Sourcegraph
简单的全局包管理
拦截了 yarn global
, npm global
安装方式, 使用 volta install
安装全局包。
pnpm 支持
对 pnpm 的支持目前是实验性的。要启用该功能,请确保环境变量 VoLTA_FEATURE_PNPM
设置为 1。
在 Windows 上可以添加到环境变量中。在 Linux/Mac 上,您可以在配置文件脚本中设置该值(例如 .bash_profile、.zshrc 或类似的脚本)。
优点
- 可以当个全局的
npm
包的安装工具 - 每个包,安装的时候,会记录依赖的
node
版本, 可以在~/.volta/tools/user
目录下查看
缺点
- 另外 volta 也有快一年没更新了,并且还不支持锁定 pnpm 版本。
- global 安装的包, 是会记录包安装时刻的 node 版本的。如果切换了 node 版本,包的依赖会使用之前的 node 版本,这个时候就需要重新安装一遍。比如
git cz
这样的工具,全局使用的话,就会有这个问题。 volta fetch
和volta install
命令让人混淆,完全可以volta install
统一处理,volta fetch
的使用场景,可能是为了将工具缓存到本地机器以供离线使用- 迟早会被
corepack
官方替代 - 无法和
rush.js
这种 monorepo 结合, root 下没有package.json
, 无法固定 - 每个包,由于有自身依赖的
node
, 而不是使用当前项目维度的,可能会在git
hook 阶段,导致node
版本校验失效。
技术总结
没大问题,用习惯也就无所谓了,但我还是建议切换 fnm + corepack, 包管理使用 pnpm.