In diesem Artikel geht es um die Verwendung von package.json zur Durchführung der Versionsverwaltung für abhängige Pakete in tatsächlichen Front-End-Projekten.
Welche Auswirkungen werden unterschiedliche Regeln auf das Abhängigkeitsmanagement haben?
Versionsformat: X.Y.Z[-string]
X.Y.Z[-string]
其含义为:
举个例子:
6.3.2-alpha
的含义为:
主版本号6,有6次不可向下兼容的更新迭代。
次版本号3,有3次小的功能迭代。6.*.*
修正版本号2,有2次bug修改或其他非重大功能的修改。6.*.*
先行版本号alpha
,表示处理试验阶段。
扩展阅读:语义化版本 2.0.0
将按下述代码进行阐释:
"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>]</semver></commit-ish></path></port></hostname></password></user></protocol>
"test": "git+ssh://git@github.com:npm/cli.git#v1.0.27"
如题,这个是血的教训换来的经验。
笔者在使用system.js
时,使用的版本限制是:system.js: "^6.3.2"
。
在安装依赖的时候,意外安装了> 6.3.2
的版本,导致项目运行出错。
原因就是system.js
作者,没有按照semver
规范,进行版本号命名,导致笔者的项目,引入了不可向下兼容的更新,进而使项目运行出错。
生产环境中使用到的依赖,统一安装在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
Die Bedeutung ist:
6.*.*
6.*.*
alpha
gibt das experimentelle Stadium der Verarbeitung an. 🎜"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" }
^
: Sperrt die Hauptversion und kann die Nebenversionsnummer, die überarbeitete Versionsnummer und die erweiterte Versionsnummer aktualisieren🎜🎜Zum Beispiel „vue-class-component“: „^6.0.0“
, bei der Installation von Abhängigkeiten können Sie jede Version installieren, die 6.*.*
entspricht, solange es sich um die Hauptversion handelt Zahl ist 6. 🎜~
: Sperren Sie die Hauptversionsnummer und die Nebenversionsnummer und aktualisieren Sie die überarbeitete Versionsnummer und die erweiterte Versionsnummer🎜🎜Zum Beispiel "vue": "~2.5.22"
, bei der Installation von Abhängigkeiten können Sie jede Version installieren, die 2.5.*
entspricht. 🎜Leeres Symbol
: Alle Versionsnummern sperren🎜🎜Zum Beispiel "vue-router": "3.0.1" code > können nur abhängige Pakete mit der Version 3.0.1
installiert werden. 🎜
Symbol*
: Definieren Sie einen bestimmten Versionsnummernbereich🎜🎜Zum Beispiel vue-router": "3.0.*" code>, Sie können jede durch 3.0
korrigierte Version installieren, z. B. 3.0.1
, 3.0.2
🎜
latest
: Installieren Sie die neueste stabile Version🎜🎜🎜"express": "latest "
, Sie können 4.18.1
(die neueste Version von 2022.06.13) installieren 🎜*
: Installieren die neueste veröffentlichte Version, nicht unbedingt die neueste Version🎜"mongoose": "*"
, können Sie Installieren Sie 6.0.0-rc2
, 3.9.7
usw. 🎜Git-URL
: Verwenden Sie das am veröffentlichte Paket Git 🎜🎜Zitatformat: <protokoll>: //[<benutzer>[:<passwort>]@]<hostname>[:<port>][:][/]<pfad> |. #semver:< ;semver>]</pfad></port></hostname></passwort></benutzer></protokoll>
🎜{ "name": "tea-latte", "version": "1.3.5", "peerDependencies": { "tea": "2.x" } }
system.js
verwendet, lautet die verwendete Versionsbeschränkung: system.js: "^6.3.2"
. 🎜🎜Bei der Installation von Abhängigkeiten wurde versehentlich die Version von > 6.3.2
installiert, was dazu führte, dass das Projekt nicht richtig ausgeführt wurde. 🎜🎜Der Grund dafür ist, dass der Autor von system.js
die Versionsnummer nicht gemäß der semver
-Spezifikation benannt hat, was zur Einführung von „nicht abwärtskompatibel“ führte in mein Projekt > Update, was dazu führt, dass das Projekt nicht ordnungsgemäß ausgeführt wird. 🎜Abhängigkeiten
installiert. 🎜🎜Zum Beispiel: 🎜rrreee🎜Der obige Code ist ein Fragment aus der package.json
des vom Autor erstellten cli
-Toolkits. 🎜shelljs
wird zum Betreiben von Dateien verwendet. Wenn die Anweisung in devDependencies
geändert wird, wird ein Fehler gemeldet, nachdem der Benutzer das aktuelle Toolpaket installiert. 🎜Weil die im Feld devDependencies
deklarierten Abhängigkeiten nicht installiert werden, wenn npm install tool package
. Es muss im Feld dependencies
deklariert werden, bevor es installiert wird. 🎜生产环境不需要使用的依赖,都需要安装在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
字段进行声明。
举个例子:
{ "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 教程!
Das obige ist der detaillierte Inhalt vonLassen Sie uns darüber sprechen, wie Sie package.json für die Versionsverwaltung abhängiger Pakete verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!