npm 语义版本控制

场景引入

开发时,常常须要依赖一些模块(包),咱们进行了下载以后,便一直在该版本的模块环境下进行开发,可是线上的服务器(其余开发者)通常都是根据依赖来配置文件,从新下载各个模块,可是保不齐某个模块的版本已经更新了,这时线上的包会更新到最新的版本,但你的代码仍是依据老版原本写的,这时可能会产生一些不知名的 Bug。node

为了保持 JavaScript 生态系统的健康,可靠和安全,npm 软件包进行重大更新时,建议在 package.json 文件中发布带有更新版本号的软件包的新版本,文件遵循语义版本规范。react

遵循语义版本规范能够帮助依赖代码的其余开发人员了解给定版本中的更改范围,并在必要时调整本身的代码。git

关于语义版本控制

为了帮助依赖你的代码的开发人员,建议在 1.0.0 开始包版本并按以下方式递增。npm 包的版本号的格式 x.y.z,版本好的格式遵循 semver 2.0 规范。npm

代码状态 阶段 规则 示例版本
首发 新产品
New product
从1.0.0开始 1.0.0
向后兼容的错误修复 补丁发布
Patch release
第三位数增长 1.0.1
向后兼容的新功能 次要发布
Minor release
中间数字增长
并将最后一个数字重置为零
1.1.0
破坏向后兼容性的更改 主要发布
Major release
第一个数字增长
并将中间和最后一个数字重置为零
2.0.0

版本规范识别

脱字符 ^

npm 经过脱字符(^)来限定所安装模块的主版本号,而该脱字符对于不一样的版本号有不一样的更新机制。json

  • ^1.2.1 更新版本范围为 >=1.2.1 && < 2.0.0;
  • ^0.2.1 更新版本范围为 >=0.2.1 && < 0.3.0;
  • ^0.0.1 更新版本范围为 0.0.2(至关于锁定为了 0.0.2 版本);

波浪号 ~

限定模块的次要版本。缓存

  • ~1.2.1 更新版本范围为 >=1.2.1 && < 1.3.0;
  • ~0.2.1 更新版本范围为 0.3.0(至关于锁定为了 0.3.0 版本);
  • 当主版本号/次版本号/修订版本号为 X or x or * 时,那么 updateinstall 是会下载该分支最新的版本号;

星号 *

跟新或安装模块时会安装>=0.0.0的最新版本安全

  • 1.x 更新版本范围为 >=1.0.0&&< 2.0.0;
  • 1.2.x 更新版本范围为 >=1.2.0&&< 1.3.0;

更多

1.能够把项目依赖的包固定在某一个版本,强制你们安装相同的依赖树服务器

npm install react --save -E
复制代码

上面命令会将 react 的版本号进行固定,可是该方式只能控制项目中直接依赖的包的版本,没法控制项目模块中依赖的包的版本号,因此这种方式也没法让不一样的使用者获得相同的依赖树。post

2.使用 npm shrinkwrap,能够将项目中的模块版本进行精确锁定 运行命令 npm shrinkwrap,会产生一个 npm-shrinkwrap.json 文件,这个文件保存了全部当前使用的依赖模块的版本。把该文件提交到 git 仓库中,这样其余人在 clone 你的项目的时候,执行 npm install 命令时,npm 检测到该文件中的信息会完整的还原出彻底相同的依赖树。spa

npm install --save-dev react // 安装react
npm prune    // 清除未被使用的模块
npm shrinkwrap
复制代码

注:这种方式,安装一个模块包的方式显得有些比较繁琐

3.使用 yarn 能够获得模块包精确控制的结果 yarn 是一个与 npm 兼容的 node 包管理器,使用它安装 npm 包,会自动在项目目录建立一个yarn.lock 文件,该文件包含了当前项目中所安装的依赖包的版本信息,其余人在使用 yarn 安装项目的依赖包时就能够经过该文件建立一个彻底相同的依赖环境。

yarn init  //使用yarn建立一个项目
yarn add <package>  //使用yarn 安装一个包
复制代码

此外,yarn 除了能够自动帮咱们锁定依赖包的版本,yarn 还在本地缓存已经安装过的包,当再次安装时,直接从本地读取便可。安装速度获得大大提高。但 yarn 的使用须要整个团队都去使用,仍是有必定的成本的。

SemVer(Semantic Versioning) 2.0.0

SemVer 是一个对 npm 包版本进行规范的模块,它对于 npm 包的版本号有着一系列的规则,如下为部分 SemVer 2.0.0 中的规则。

  • 在版本控制环节咱们已经说过了,模块的版本号采用 X.Y.Z 的格式,且都必须为非负的正整数,依次为主版本号、次版本号,修改版本号;
  • 当规定版本的模块进行发布以后,对于该模块的任何修改,都必须发布新版本;
  • 主版本号为 0.X.Y 的模块处于开发阶段,模块并不稳定;
  • 主版本号在有不向下兼容的 API 发布时必须修改,在主版本号递增时,次版本号和修订版本号必须从新归零;
  • 次版本号再有向下兼容的 API 发布时进行递增修改,在模块中有 API 被弃用时也必须递增次版本号,当此版本号递增改变时,修订版本号 Z 必须归零;
  • 版本的优先级就是各个版本的排序规则,判断版本优先级时,必须把版本号从左至右分为主版本号、此版本号、修订版本号、以及先行版本号来进行比较;

你能够...

上一篇:npm 经常使用命令(便于查找,提升开发效率)

相关文章
相关标签/搜索