Node.js中package.json中库的版本号详解(^和~区别)

作者: tww844475003 分类: Node.js 发布时间: 2021-05-22 16:21

当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号(~)。那么他们到底有什么区别呢?先贴一个例子,对照例子来做解释:

{
  "name": "vue-ssr",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node server/server.js",
    "dev": "webpack-dev-server --config config/webpack.client.config.js",
    "build:client": "webpack --config config/webpack.client.config.js",
    "build:server": "webpack --config config/webpack.server.config.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "koa": "^2.11.0",
    "koa-router": "^8.0.8",
    "koa-static": "^5.0.0",
    "vue": "^2.6.11",
    "vue-router": "^3.2.0",
    "vue-server-renderer": "^2.6.11",
    "vuex": "^3.4.0"
  },
  "devDependencies": {
    "@babel/core": "^7.9.6",
    "@babel/preset-env": "~7.9.6",
    "autoprefixer": "^9.7.6",
    "babel-loader": "^8.1.0",
    "css-loader": "^3.5.3",
    "extract-text-webpack-plugin": "^4.0.0-beta.0",
    "file-loader": "^6.0.0",
    "html-webpack-plugin": "^4.3.0",
    "postcss": "^7.0.30",
    "postcss-loader": "^3.0.0",
    "style-loader": "^1.2.1",
    "url-loader": "^4.1.0",
    "vue-loader": "^15.9.2",
    "vue-style-loader": "^4.1.2",
    "vue-template-compiler": "^2.6.11",
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.11",
    "webpack-dev-server": "^3.11.0",
    "webpack-merge": "^4.2.2"
  }
}

@babel/core版本号:^7.9.6
@babel/preset-env版本号:~7.9.6

当我们使用最新的Node运行‘npm instal –save xxx’,的时候,他会优先考虑使用插入符号(^)而不是波浪符号(~)了。

这对于你来说意味这什么呢?首先我们需要理解这两者(~和^)的区别。

波浪符号(~):他会更新到当前minor version(也就是中间的那位数字)中最新的版本。放到我们的例子中就是:@babel/preset-env:~7.9.6,这个库会去匹配更新到7.9.x的最新版本,如果出了一个新的版本为7.10.0,则不会自动升级。波浪符号是曾经npm安装时候的默认符号,现在已经变为了插入符号。

插入符号(^):这个符号就显得非常的灵活了,他将会把当前库的版本更新到当前major version(也就是第一位数字)中最新的版本。放到我们的例子中就是:@babel/core:^7.9.6,这个库会去匹配8.x.x中最新的版本,但是他不会自动更新到8.0.0。

总结一下:

~7.9.6 :=  >=7.9.6 <7.10.0     

^7.9.6 := >=7.9.6 <8.0.0

最后解释下之前提到的minor verision和major version:

1.15.2对应就是MAJOR,MINOR.PATCH:1是marjor version;15是minor version;2是patch version。

MAJOR:这个版本号变化了表示有了一个不可以和上个版本兼容的大更改。

MINOR:这个版本号变化了表示有了增加了新的功能,并且可以向后兼容。

PATCH:这个版本号变化了表示修复了bug,并且可以向后兼容。

因为major version变化表示可能会影响之前版本的兼容性,所以无论是波浪符号还是插入符号都不会自动去修改major version,因为这可能导致程序crush,可能需要手动修改代码。

前端开发那点事
微信公众号搜索“前端开发那点事”

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注