近期来到新的项目组,先不说项目周期是多久,闲了一个多月,等着原型和UI图,干着急没用!顺便接手了一个离职同事的项目,那不是shi山也差不多了,一个页面几千行代码,框架不封装,我不想改,真是无语啊,无从下手,可能是项目周期比较长,接手的人比较多,我这只是后期维护和新增某些功能。 这个项目中遇到了一个node版本问题,就是必须使用固定的node版本,具体我就不说了。但是安装固定版本的node之后,我想到下次另外项目需要别的版本我怎么办???于是我找到了一个方法如下。
1 项目背景
每个前端项目都依赖不同的node版本,随着项目增多,容易混淆node版本,只有在node版本报错时才能发现。才会想起来排查默认的node环境与项目默认的node版本是否匹配。 遗憾的是,并不是所有的项目都会把node版本依赖这种细节交代清楚,特别是接手别人的代码和迁移项目的时候。因此在这个地方需要消耗大量时间来寻找合适的版本号。为了避免别人踩坑,需要将这个需求写到README文件中。为他人提供便利。但是其他人或许在初次拉取代码会把自己本地新安装的package.json强制覆盖仓库的依赖。所以日积月累,node版本因为项目需升级,但却没更新README文件,那么README形同虚设。
2分析
要想从根本解决问题,需要的解决方案应满足如下条件:
高稳定: 工具一定要长期可用,有人长期维护,且有先例使用,避免踩坑
高安全性: 不会因为工具问题导致项目运行受影响,更不能影响项目功能
低成本: 易理解,易安装,安装一次多个项目通用,满足后续无需多次安装
高强制性与高自定义性平衡: 强制每一个参与开发的同事都使用相同功能,同时也应该允许不使用该工具保证出问题时能手动控制
按照以上标准,分析比对出了一个符合要求的工具 -- Volta;
3 volta使用教程
官方项目地址是:github.com/volta-cli/v…
官方说明文档地址是:volta.sh/
官网对该工具的定位是:轻松的JavaScript工具管理器。其有三个特点:
1. 高效快速: 快速无缝地安装和运行任何 JS 工具!Volta 是用 Rust 构建的,并作为精炼的静态二进制文件发布。
2. 可靠: 确保项目中的每个人都拥有相同的工具,而不会干扰他们的工作流程。
3. 通用: 无论是包管理器、Node 运行时还是操作系统,您只需要一个命令:volta install.
3.1如何安装
1-window下载
[https://github.com/volta-cli/volta/releases/download/v1.0.8/volta-1.0.8-windows-x86_64.msi]()
查看是否安装成功
# 安装完毕后看看是否安装成功
volta -v # 1.0.7
执行volta命令后,界面出现版本号提示,则证明安装成功,
如界面提示"command not found", 请检查是否执行了上述的第三步。
至此,volta的安装全部完成,接下来,一起看看该如何使用。
2-Unix使这个
curl https://get.volta.sh | bash
3-日常使用
# 安装指定npm版本
volta install node@14.19.0 # 安装完毕后会自动应用该版本
# 查看现在安装的node版本列表
volta list all
# 在项目内指定版本,在进入该项目时会自动切换到该node版本,非常滴方便呢
volta pin node@14.19.0
3.2 如何使用
在此之前,请先准备两个依赖不同node版本的项目,并记住他们各自依赖的node版本号。
此处演示时,我以A、B两个项目做演示,在没有进行任何操作时,我分别对A、B两项目执行查看node版本的命令,得到的版本号一致,均为全局默认版本号v12.21.0
如果,A项目需要依赖的node版本为10.23.0,B项目需要依赖的node版本为11.6.0,设置步骤如下
第一步:在A项目的package.json文件中添加以下代码:
"volta": {
"node": "10.23.0"
}
第二步:再次在终端执行以下代码,查看A项目node版本:
node -v
此时,终端显示的结果已经切换到目标版本10.23.0,结果如下:
此时,版本自动切换就成功了,此时我们再次查看B项目的node版本依赖,执行node -v 后,发现版本号依然为v12.21.0,说明A项目的版本切换并不影响B项目,实现了隔离。如果想要把B项目node版本指定为11.6.0,设置方法与设置A项目步骤相同,快亲自动手试试吧。
volta扩展
上面的教程已经满足了我们实际项目需要,但如果我们有兴趣,不满足于这些基本使用,你会发现一写有趣的功能:
1. node
执行node指令后,你将获得一个当前指定版本的node执行环境;
2. volta install node@12.22.8
执行该指令后,你将安装node的12.22.8版本,当下次指定node版本为12.22.8时,能够快速切换到该版本;否则,如果指定的版本在volta工具中不存在,volta将会自动匹配安装,这将花费1-2分钟。示例如下:
3. volta list all
执行该指令后,你将能够查看所有已安装到volta工具的node版本,同时能够看到全局默认node环境以及当前正在使用的node环境。示例如下:
4. volta list
执行该指令后,你将查看当前项目正在使用的node版本
5. volta pin node@10.23.0
执行该指令后,你将当前项目的node版本指定为10.23.0,同时将自动更改package.json中关于volta的配置;
以上总结了5个常见的扩展指令,更多有趣功能,请移步官方说明文档:docs.volta.sh/reference/
5volta总结
1-参考文献
- lta官方文档地址: volta.sh/
- voltaGithub仓库地址: github.com/volta-cli/v…
- volta指令: docs.volta.sh/reference/
2-优势
1. 低成本: volta的安装只需要一行命令,使用也只需要增加一项配置,配置、学习成本低;原理上,volta的原理可以理解为:volta会将指定版本的node路径存储为一个变量,当进入项目时会自动将node版本指向并切换到执行版本,并且会自动帮你切换合适的npm版本,你无需担心二者不匹配;项目与项目之间版本隔离,只需要在根目录下安装一次,可以在任何地方无限次使用。
2. 高稳定性: volta在Github平台有 5.8K Star,拥有38位代码贡献值,社区活跃,且长期保持固定频率更新;目前已有500+ 开源项目使用该工具,包括TypeScript、sentry-javascript等大型开源项目;
3. 高安全性: volta的配置放在package.json中,即使未使用该工具时,也不会影响业务功能,实现了开发与正式环境隔离。
4. 高强制性与高自定义性平衡: 只要安装过volta工具的开发者,都会遵循自动切换指定版本node环境,且可以手动更新执行版本,实现手动接管版本管理。