1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

关于package.json管理依赖包版本的详解

介绍

我是本际云服务器推荐网的小编小本本,今天我们来讲一讲关于package.json管理依赖包版本的详解。

关于package.json管理依赖包版本的详解

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等。

GitURL:使用Git上发布的包,引用格式:<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish>|#semver:<semver>],例如”test”:”git+ssh://git@github.com:npm/cli.git#v1.0.27″

扩展阅读:npmdocs-dependencies

在这里要提醒下,请千万不必相信npm包的版本号,这样说就是血泪教训啊。我们知道笔者在使用system.js时,使用的版本限制是:system.js:”^6.3.2″。在安装依赖的时候,意外安装了>6.3.2的版本,导致项目运行出错。原因就是system.js作者,没有按照semver规范,进行版本号命名,导致笔者的项目,引入了不可向下兼容的更新,进而使项目运行出错。

dependencies、devDependencies与peerDependencies

dependencies

生产环境中使用到的依赖,统一安装在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字段声明的依赖,在npminstall工具包时,是不会安装的。必须在dependencies字段中声明,才会被安装。

devDependencies

生产环境不需要使用的依赖,都需要安装在peerDependencies下。因为生产环境下,是不会安装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。当不满足要求时,控制台会进行报错处理。

注意:npmv7版本,peerDependencies会默认安装。npmv3到npmv6版本,peerDependencies不会自动安装。

参考:npmDocs、语义化版本2.0.0

本文关于package.json管理依赖包版本的详解已讲述完毕,欢迎大家关注更多后续精彩内容。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6821.html