概述
1、版本符号
参考:https://oliver.blog.csdn.net/article/details/125762185
{
"name": "typescript",
"author": "Microsoft Corp.",
"homepage": "https://www.typescriptlang.org/",
"version": "4.7.4",
"license": "Apache-2.0",
"description": "TypeScript is a language for application scale JavaScript development",
"keywords": [
"TypeScript",
"Microsoft",
"compiler",
"language",
"javascript"
],
"bugs": {
"url": "https://github.com/Microsoft/TypeScript/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/Microsoft/TypeScript.git"
},
"main": "./lib/typescript.js",
"typings": "./lib/typescript.d.ts",
"bin": {
"tsc": "./bin/tsc",
"tsserver": "./bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
},
"packageManager": "npm@6.14.15",
"devDependencies": {
"@octokit/rest": "latest",
"@types/chai": "latest",
"@types/convert-source-map": "latest",
"@types/glob": "latest",
"@types/gulp": "^4.0.9",
"@types/gulp-concat": "latest",
"@types/gulp-newer": "latest",
"@types/gulp-rename": "0.0.33",
"@types/gulp-sourcemaps": "0.0.32",
"@types/merge2": "latest",
"@types/microsoft__typescript-etw": "latest",
"@types/minimatch": "latest",
"@types/minimist": "latest",
"@types/mkdirp": "latest",
"@types/mocha": "latest",
"@types/ms": "latest",
"@types/node": "latest",
"@types/node-fetch": "^2.3.4",
"@types/q": "latest",
"@types/source-map-support": "latest",
"@types/xml2js": "^0.4.0",
"@typescript-eslint/eslint-plugin": "^4.28.0",
"@typescript-eslint/experimental-utils": "^4.28.0",
"@typescript-eslint/parser": "^4.28.0",
"async": "latest",
"azure-devops-node-api": "^11.0.1",
"chai": "latest",
"chalk": "^4.1.2",
"convert-source-map": "latest",
"del": "5.1.0",
"diff": "^4.0.2",
"eslint": "7.12.1",
"eslint-formatter-autolinkable-stylish": "1.1.4",
"eslint-plugin-import": "2.22.1",
"eslint-plugin-jsdoc": "30.7.6",
"eslint-plugin-no-null": "1.0.2",
"fancy-log": "latest",
"fs-extra": "^9.0.0",
"glob": "latest",
"gulp": "^4.0.0",
"gulp-concat": "latest",
"gulp-insert": "latest",
"gulp-newer": "latest",
"gulp-rename": "latest",
"gulp-sourcemaps": "latest",
"merge2": "latest",
"minimist": "latest",
"mkdirp": "latest",
"mocha": "latest",
"mocha-fivemat-progress-reporter": "latest",
"ms": "^2.1.3",
"node-fetch": "^2.6.1",
"prex": "^0.4.3",
"q": "latest",
"source-map-support": "latest",
"typescript": "^4.5.5",
"vinyl": "latest",
"vinyl-sourcemaps-apply": "latest",
"xml2js": "^0.4.19"
},
"scripts": {
"prepare": "gulp build-eslint-rules",
"pretest": "gulp tests",
"test": "gulp runtests-parallel --light=false",
"test:eslint-rules": "gulp run-eslint-rules-tests",
"build": "npm run build:compiler && npm run build:tests",
"build:compiler": "gulp local",
"build:tests": "gulp tests",
"start": "node lib/tsc",
"clean": "gulp clean",
"gulp": "gulp",
"lint": "gulp lint",
"lint:ci": "gulp lint --ci",
"lint:compiler": "gulp lint-compiler",
"lint:scripts": "gulp lint-scripts",
"setup-hooks": "node scripts/link-hooks.js"
},
"browser": {
"fs": false,
"os": false,
"path": false,
"crypto": false,
"buffer": false,
"@microsoft/typescript-etw": false,
"source-map-support": false,
"inspector": false
},
"volta": {
"node": "14.15.5"
}
}
主要关注的点在于 dependencies 和 devDependencies 这两个字段下 安装的依赖包的版本号,
"convert-source-map": "latest",
"del": "5.1.0",
"diff": "^4.0.2",
"eslint": "7.12.1",
"eslint-formatter-autolinkable-stylish": "1.1.4",
"eslint-plugin-import": "2.22.1",
"eslint-plugin-jsdoc": "30.7.6",
"eslint-plugin-no-null": "1.0.2",
"fancy-log": "latest",
"fs-extra": "^9.0.0",
版本号是由3段组成,大致说明如下:主版本号 . 子版本号 [. 修正版本号[ build- 编译版本号 ]]
主版本号
主版本号,也就是eslint": "7.12.1
中的 7,通常我们认为是 某个大的迭代,这种迭代一般都代表 有颠覆性,巨大功能的变化,这种迭代可以是兼容的,也可以是不兼容的
因此,当我们的项目工程 安装引用了某些第三方插件时,如果更新,通常 不建议跨版本更新,比如从 2.9.0 升级到 3.0.0,这是一个风险很高的选项,我们通常只会更新子版本,甚至只更新修复版本;
子版本号
子版本号,也就是 eslint": "7.12.1
中的 12,这个通常认为是 当前主版本下的功能性迭代,这些功能性的迭代并 不涉及到架构,底层实现 等等诸如此类会影响到插件本身的改动,并且这种改动往往是完全继承之前版本用法的,并不会有变革性的更新
实际项目开发中,如果安装了一些第三方插件,并且 插件更新了一些新功能,如果是 子版本的更新,那么开发者可以根据实际的项目情况来决定是否更新这些子版本,通常子版本的更新我们 认为是兼容的,不存在上下两个版本内容,用法不一致的情况;
修复版本号
修复版本,也就是 eslint": "7.12.1
中的 1,顾名思义,这个版本号更新一般 针对的是当前这个版本出现了BUG,BUG一旦修复那么这个修复版本号就会加1
实际项目开发中,这种更新最为常见,因为如果项目中的BUG是由于依赖包的更新出现的,这种BUG往往很难被发现与定位,因此对于依赖的管理,我们通常会定一个主版本与子版本,更新时只更新修复版本号做BUG的修复,不做功能上的扩展;
版本符号说明
插入符号^
插入符号^,这个代表 锁住大版本号,可以更新子版本号以及修复版本号,看个例子
"eslint": "^7.12.1"
如果eslint的版本是这么描述的,那么代表,安装eslint的时候,会从7.12.1起,但是不会安装8.x的版本,比如可以更新7.13.0,也可以安装7.16.0,甚至可以安装7.19.10都可以,但是一旦最新版本的大版本是8开头的了,那么这个时候进行安装则会被拦截;
因此,插入符号^,代表只更新子版本,修复版本号,不会更新大版本号;
波浪号~
波浪号~,这个代表 锁住大版本号和子版本号,可以更新修复版本号,看个例子
"eslint": "~7.12.1"
以 eslint 版本为例,以波浪号为开头,安装vue的时候,会从7.12.1起,但是不会安装7.13的版本,根据定义,它只会更新修复版本号,比如 可以更新7.12.2,更新7.12.3,甚至是7.12.100,但是不会更新到7.13;
因此,波浪号~,代表只更新修复版本号,不会更新主版本号以及子版本号,但是 有一个例外,就是子版本号是0
"eslint": "~7.0.1"
由于 0在版本规则中通常认为是无意义的,可以忽略的,那么此时,也就代表着子版本号也是可以更新的,即使版本号签名的符号是波浪号,它也会去更新子版本号,因此这种情况下,版本号的区间会是: 大于7.0.1小于8.0.0
package.json 是用来 进行包管理的,它里面记录着当前这个项目中各个依赖包或者说是插件的信息,并且这些依赖包都会有一个版本号,版本号上不同的位置数字代表不同的含义,分别是:主版本号.子版本号.修复版本号
不加符号
依赖中的符号是可以不加,比如上面那个,去掉插入符号
"eslint": "7.12.1"
这代表着 指定版本,如果此时进行安装那么,包管理工具只会去安装 7.12.1 这一个版本,简单的理解,就是 锁版本 了;
空(也就是没有符号)锁定 修复版本号
一些
latest
安装的永远是最新发布的版本
>version
: 必须大于某个版本
如:>1.1.2,表示必须大于1.1.2版
>=version
:可大于或等于某个版本
如:>=1.1.2,表示可以等于1.1.2,也可以大于1.1.2版本
<version
:必须小于某个版本
如:<1.1.2,表示必须小于1.1.2版本
<=version
:可以小于或等于某个版本
如:<=1.1.2,表示可以等于1.1.2,也可以小于1.1.2版本
version1 - version2
:
大于等于version1,小于等于version2
如:1.1.2 - 1.3.1,表示包括1.1.2和1.3.1以及他们之间的任意版本
range1 || range2
:
满足range1或者满足range2,可以多个范围
如:<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 表示满足这3个范围的版本都可以
X
x的位置表示任意版本
如:1.2.x,表示可以1.2.0,1.2.1,…,1.2.n
*
*
和 ""
都表示任意版本
"eslint":"*" // 表示>=0.0.0的任意版本
最后
以上就是洁净抽屉为你收集整理的package.json 介绍1、版本符号的全部内容,希望文章能够帮你解决package.json 介绍1、版本符号所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复