开发时,常常须要依赖一些模块(包),咱们进行了下载以后,便一直在该版本的模块环境下进行开发,可是线上的服务器(其余开发者)通常都是根据依赖来配置文件,从新下载各个模块,可是保不齐某个模块的版本已经更新了,这时线上的包会更新到最新的版本,但你的代码仍是依据老版原本写的,这时可能会产生一些不知名的 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 *
时,那么 update
或 install
是会下载该分支最新的版本号;*
跟新或安装模块时会安装>=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 是一个对 npm 包版本进行规范的模块,它对于 npm 包的版本号有着一系列的规则,如下为部分 SemVer 2.0.0 中的规则。
X.Y.Z
的格式,且都必须为非负的正整数,依次为主版本号、次版本号,修改版本号;0.X.Y
的模块处于开发阶段,模块并不稳定;