npm&node版本那些事儿

3,033 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

npm版本

语义化版本

npm的版本号遵从语义化版本规范,使用 x.y.z 形式,对应MAJOR.MINOR.PATCH,也即主版本号.次版本号.修订版本号,各位置的版本号的含义如下:

版本号含义兼容性
主版本号如有改变,表示对API作了改动不兼容
次版本号如有改变,表示增加了新feature向下兼容
修订版本号如有改变,表示修复了存在的bug向下兼容

💡指导意义:不要轻易改动主版本号,可能会导致功能上出现各种难以定位的问题

先行版本

x.y.z 格式是模块正式版本,重要模块为了保证稳定,会在放出正式版本之前提供先行版本

  • alpha: 内部测试版,主要给开发和测试找bug
  • beta: 公开测版本,主要用于给用户提前体验一些功能
  • rc: 即Release candidate,正式版本的候选版本,可以理解为预览版,不会再增加新功能,再改一些小bug,就会到正式的版本了

npm版本控制

安装npm包时,版本前符号的含义:

  • *:使用任意版本
  • ^x.y.zx 位与指定版本一致,yz 位使用最新版本
  • ~x.y.zxy位与指定版本一致,z位使用最新版本
  • x.y.z@x.y.zxyz全部锁死,使用指定的版本

升级版本相关的npm指令

  • 升级主版本号:npm version major
  • 升级次版本号:npm version minor
  • 升级修订版本号:npm version patch
  • 更新指定的包:npm update 包的名称

node版本

版本号和生命周期

npm一样,node的版本号同样遵从语义化版本规范,也即主版本号.次版本号.修订版本号

image.png 如上面官方提供的图,在每个版本(这里指的是主版本号node.js的发布周期中,随着时间的推进:

  • 偶数主版本号依次会经历CURRENT -> Active Long Term Support (LTS)-> Maintenance Long Term Support (LTS)三个阶段
  • 奇数主版本号只有CURRENT阶段

关于每个阶段的含义:

  • CURRENT阶段Node.js的开发者专注于开发必要的功能,并完善已有的API,通常持续时间较短,更新较快;我们可以使用该阶段发布的Node.js体验到最新功能,但也可能会遇到各种问题

    • 通常会在每年的 4 月发布新的奇数版本,比如Node.js 18.0.0就是2022-04-18发布的
    • 每年的 10 月发布新的偶数版本,比如Node.js 17.0.0就是2021-10-19发布的
    • Node.js 19.0.0 is comming😅
  • Active LTS阶段:正在积极维护和升级LTS,该阶段Node.js的开发者已经对新功能、错误修复和新特性作了审核;该阶段发布的Node.js具有良好的稳定性和安全性

  • Maintenance LTS阶段:维护LTS,这个阶段结束之后该版Node.js就不会再被开发者维护了

💡指导意义

  • 想尝试node的一些新特性,做一些实验性的项目,就用Current

  • 用于生产环境开发项目的话,老老实实用LTS版,同时稍微注意一下维护的结束时间

node版本控制

nvm为例,安装包下载地址:Releases · coreybutler/nvm-windows (github.com)

安装前保证电脑上无Node.js,之后一路Next

nvm常用命令:

  • 安装指定版本nodenvm install 16.18.0
  • 查看已安装版本列表: nvm list
  • 切换node版本: nvm use 14.15.1

nodenpm的版本匹配

详见官网:Previous Releases | Node.js (nodejs.org)

总结

  • 针对已有项目,安装npm包时,不要轻易改动其主版本号,最好使用~x.y.z,甚至@x.y.z
  • 注意生产环境使用LTSnode,注意nodenpm版本的匹配