Skip to main content

Version & Dependencies

Semantic version

一般来说,版本号主要分为三部分:主版本号(major)次版本号(minor)修补版本号(patch)。以2.6.6为例,major 为 2,minor 为 6,patch 为 6。

  • major: 主版本号,新的架构调整或不兼容的修改被加入公共 API 必须递增,次版本号和修订号必须归零。
  • minor: 次版本号,新增功能,兼容老版本,或公共 API 标记为弃用时必须递增,修订号必须归零。
  • patch: 修订号,修复 bug,兼容老版本。

Symbols

  • ^: 升级 minor + patch

    • 如:^2.6.6 ,表示更新版本范围>=2.6.6 <3.0.0,可以是2.x.x
    tip

    当 major 为零的阶段(0.y.z),不会更 minor,只会更新 patch,因为该阶段相对不稳定。

    • 如:^0.6.6,表示更新版本范围 >=0.6.6 <0.7.0,可以是0.6.x
    • 如:^0.6,表示更新版本范围>=0.6.0 <0.7.0,可以是0.6.x
  • ~: 升级 patch

    • 如:~2.6.6,表示更新版本范围>=2.6.6 <2.7.0,可以是2.6.x,兼容 patch。
    • 如:~2.6,表示更新版本范围>=2.6.0 <2.7.0,可以是2.6.x,兼容 patch。
    • 如:~2,表示更新版本范围>=2.0.0 <3.0.0,可以是2.x.x,兼容 minor 和 patch。
  • *:升级到 latest

    • 表示任意版本。如:*,表示更新版本范围为>=0.0.0的任意版本。
  • 比较符号:最直观,但由于粗粒度控制,用得不多

    • >: 表示只要大于这个版本的安装包都行,如>2.0.0
    • >=: 表示只要大于或等于这个版本的安装包都行,如>=2.0.0
    • <: 表示只要小于这个版本的安装包都行,如<2.0.0
    • <=: 表示更新版本范围只要小于或等于这个版本的安装包都行,如<=2.0.0

依赖类型

dependencies

代码运行时所需要的依赖。

devDependencies

开发依赖,就是那些只在开发过程中需要,而运行时不需要的依赖,这只是一种理想约定,如果是开发某个项目,不是给别人用的库,在项目中执行 npm install 的时候,会安装 dependencies + devDependencies 的所有模块,如果是开发某个库,别人的项目依赖了你这个库,在别人的项目执行 npm install 的时候,只会安装间接依赖的时候,只会安装你库中 dependencies 声明的模块。

peerDependencies

同伴依赖,它用来告知宿主环境需要什么依赖以及依赖的版本范围。如果宿主环境没有对应版本的依赖,在安装依赖时会报出警告,自身项目环境中并不会安装这里声明的依赖。

optionalDependencies

可选依赖,这种依赖即便安装失败,Npm/Yarn 也会认为整个依赖安装过程是成功的。可选依赖适用于那些即便没有成功安装可选依赖,也有后备方案的情况。

bundledDependencies

打包依赖,在发布包时,这个数组里的包都会被打包打包到最终的发布包里,需要注意 bundledDependencies 中的包必须是在 devDependenciesdependencies 声明过的。

Reference

  1. Semantic Versioning 2.0.0