npm版本号定义版本格式:x.y.z[-string]
其含义为:
x:主版本号y:次版本号z:修正版本号string: 先行版本号或版本编译信息举个例子:
6.3.2-alpha的含义为:
主版本号6,有6次不可向下兼容的更新迭代。
次版本号3,有3次小的功能迭代。6.*.* <=6.3.2的依赖声明,都可以安装此新包。
修正版本号2,有2次bug修改或其他非重大功能的修改。6.*.* <=6.3.2的依赖声明,都可以安装此新包。
先行版本号alpha,表示处理试验阶段。
扩展阅读:语义化版本 2.0.0
package.json怎么识别依赖版本将按下述代码进行阐释:
"vue": "~2.5.22","vue-class-component": "^6.0.0","vue-router": "3.0.1","express": "latest","mongoose": "*",
符号^:锁定主版本,可更新次版本号、修正版本号和先行版本号
例如"vue-class-component": "^6.0.0",安装依赖时,可以安装符合6.*.* 的任意版本,只要主版本号是6即可。
符号~:锁定主版本号和次版本号,可更新修正版本号和先行版本号
例如"vue": "~2.5.22",安装依赖时,可以安装符合2.5.*的任意版本。
空符号:锁定所有版本号
例如"vue-router": "3.0.1",只能安装版本为3.0.1的依赖包。
符号*:定义某个版本号范围
例如vue-router": "3.0.*",可以安装3.0固定的任意版本,比如3.0.1、3.0.2。
latest:安装最新的稳定版本
例如"express": "latest",可以安装4.18.1 (2022.06.13最新版本)。
*:安装最新发布的版本,不一定是稳定版本
例如"mongoose": "*",可以安装6.0.0-rc2、3.9.7等。
git url:使用git上发布的包
引用格式: <protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]
test: git+ssh://git@github.com:npm/cli.git#v1.0.27
扩展阅读:npm docs - dependencies
不要太相信npm包的版本号!如题,这个是血的教训换来的经验。
笔者在使用system.js时,使用的版本限制是:system.js: ^6.3.2。
在安装依赖的时候,意外安装了> 6.3.2的版本,导致项目运行出错。
原因就是system.js作者,没有按照semver规范,进行版本号命名,导致笔者的项目,引入了不可向下兼容的更新,进而使项目运行出错。
dependencies、devdependencies与peerdependenciesdependencies生产环境中使用到的依赖,统一安装在dependencies下。
举个例子:
dependencies: { chalk: ^2.4.2, commander: ^3.0.0, fs-extra: ^8.1.0, inquirer: ^6.5.0, mem-fs: ^1.1.3, mem-fs-editor: ^6.0.0, shelljs: ^0.8.3}
上述代码,是笔者做的cli工具包的package.json中的片段。
shelljs用于操作文件,如果改在devdependencies声明,则用户安装当前工具包后,运行会报错。
因为devdependencies字段声明的依赖,在npm install 工具包时,是不会安装的。必须在dependencies字段中声明,才会被安装。
devdependencies生产环境不需要使用的依赖,都需要安装在devdependencies下。
因为生产环境下,是不会安装devdependencies字段下的依赖的。
举个例子:
devdependencies: { @commitlint/cli: ^8.1.0, @commitlint/config-conventional: ^8.1.0, commitizen: ^4.0.3, commitlint-config-cz: ^0.12.1, cz-customizable: ^6.2.0, standard-version: ^7.0.0}
上述代码,是笔者做的cli工具包的package.json中的片段。
commitizen是笔者用于规范git提交规范的依赖包,只在开发环境中使用,所以在devdependencies中声明。
peerdependencies当开发一些插件和工具包时,对使用方的运行环境的依赖包版本有要求,可以使用peerdependencies字段进行声明。
举个例子:
{ name: tea-latte, version: 1.3.5, peerdependencies: { tea: 2.x }}
当前工具tea-latte,依赖tea包。而且,要求tea包是主版本2。
当不满足要求时,控制台会进行报错处理。
注意
npm v7版本, peerdependencies会默认安装。
npm v3 到 npm v6版本, peerdependencies不会自动安装。
更多node相关知识,请访问:nodejs 教程!
以上就是聊聊如何使用package.json对依赖包进行版本管理的详细内容。
