前言
在前端开发中,包版本控制是至关重要的。对于我们前端开发者来说,NPM是用于安装和管理软件包的主要工具。每个NPM包都有一个独特的版本号,它对于理解包的变更历史,兼容性以及功能更新是非常关键的。有时候工作当中所产生的一些未知BUG或多或少都和版本号管理有关。
版本号说明
一个完整的NPM包版本号由三部分组成:主版本号(Major),次版本号(Minor)和修订版本号(Patch)。这三部分通常以点 .
分隔,例如:1.2.5
。每个部分都有特定它自己特殊的含义。
- 主版本号(Major):当项目(包)做了重大的更新,与旧的版本存在一定的不兼容性等问题时,主版本号就需要增加。这通常表示有一些重大更新或者重构,可能引入了新的功能或者移除了某些功能。
- 次版本号(Minor):当项目(包)做了少量的变更或向下做了兼容时,次版本号会增加。这可能表示添加了一些新功能或者修复了一些严重的问题,但仍然与旧版本保持一定的兼容性。
- 修订版本号(Patch):当修复上一个版本的bug或向下做兼容时,修订版本号会增加。这通常表示对现有功能的改进或者对bug的修复。
而版本号变更的一般规则都是:版本号只升不降,不得在数字前面加0。例如,不能是 1.01.0
,应该是 1.0.0
。一般第一个正式版本应为 1.0.0
。
以下是一个 dependencies
包管理的配置
json
"dependencies": {
"@flypeng/tool": "^5.3.2",
"@logicflow/core": "^1.2.15",
"@logicflow/extension": "^1.2.16",
"@pansy/vue-watermark": "^1.2.0",
"@vueuse/core": "^9.13.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"animate.css": "^4.1.1",
"axios": "^1.5.1",
"colord": "^2.9.3",
"dayjs": "^1.11.10",
"driver.js": "^0.9.8",
"echarts": "^5.4.3",
"fuse.js": "^6.6.2",
"mitt": "^3.0.1",
"mockjs": "^1.1.0",
"modern-screenshot": "^4.4.32",
"naive-ui": "^2.35.0",
"nprogress": "^0.2.0",
"pinia": "^2.1.7",
"swiper": "^10.3.1",
"v-clipboard": "3.0.0-next.1",
"vditor": "^3.9.6",
"vue": "^3.3.4",
"vue-i18n": "^9.5.0",
"vue-router": "^4.2.5",
"vue3-photo-preview": "^0.3.0",
"vuedraggable": "^4.1.0",
"xgplayer": "^2.32.5",
"xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz"
}
版本标识符
包版本格式为:Major.Minor.Patch-Identifier.1
。其中 Identifier
就是标识符
版本号后面的标签或扩展通常用于表示包的发布状态或功能特性。例如,一个包可能有预发布版本(如 0.1.0-beta
),测试版本(如 0.2.0-test
),或者稳定版本(如 1.0.0
)。这些标签可以帮助开发者了解包的发布情况,选择合适的功能特性或者稳定度。
关于版本标签主要有以下这几种,多得就不介绍了。
- 预发布版本(Prerelease、Next) :这种标签用于标识一个包还未正式发布,但已经准备就绪,可以进行测试或者预览。常见的预发布版本标签包括
alpha
、beta
和RC(Release Candidate)
。例如,一个包可能是3.2.3-beta-3
,这表示它是3.2.3版本的预发布版本,已经进行了三次测试。 - 测试版本(Test) :这种标签用于标识一个包正在进行测试阶段。通常,这种标签会与特定的测试版本号一起使用,例如
@next
或者@testing
。 - 稳定版本(Stable):这种标签用于标识一个包已经稳定并且准备好进行生产使用。通常,这种标签会与特定的主版本号一起使用,例如@1.0.0。
版本运算符
版本运算符应该算的上是NPM包版本管理的重点了。有时候在开发项目时我们只会使用某个包的特定版本,如果是更新版本或降低版本就会导致包不可用的情况。这种情况就需要我们了解到版本运算符的相关概念的知识了。
这里主要解释两个主要的运算符符号 ^
和 ~
~
版本号锁住主版本号或者次版本号,只修订版本号。也就是说安装时不改变大版本号和次要版本号,只改变修订版本号。
~1.3.2
: 表示安装的是1.3.x的最新版本(不低于1.3.2),但是不安装1.4.0
。
^
版本号匹配第一个非0版本号,锁住主版本号,只修改次版本号和修订版本号。
^1.3.2
: 表示安装的是1.x.x的最新版本(不低于1.3.2),但是不安装2.0.0
。
NPM 在安装和更新包时,默认使用 ^
来匹配包版本。
相关命令
npm list
:查看当前目录下已安装的node包。该命令会列出当前项目中所有已安装的包及其版本信息。npm list <package-name>
:查看指定包及其依赖项的安装情况。该命令会列出指定包的版本信息以及其依赖项的版本信息。npm install <package-name>
:安装指定包及其依赖项。该命令会下载并安装指定包及其依赖项,并将它们添加到项目的node_modules
目录中。npm update <package-name>
:更新指定包及其依赖项。该命令会下载并安装指定包的最新版本及其依赖项,并更新项目的node_modules
目录。npm uninstall <package-name>
:卸载指定包及其依赖项。该命令会删除指定包及其依赖项,并从项目的node_modules
目录中移除它们。npm config list
:查看配置信息。该命令会列出当前NPM的配置信息,包括代理、镜像源等。npm --help
:查看NPM帮助命令。该命令会显示NPM的帮助文档,包括所有可用的命令和选项。npm root
:查看当前包的安装路径。该命令会返回当前项目中所有已安装包的根目录路径。npm root -g
:查看全局的包的安装路径。该命令会返回全局环境中所有已安装包的根目录路径。npm ls <package-name>
:查看本地安装的指定包及版本信息,没有显示empty。该命令会列出指定包的详细信息,包括版本号、依赖项等。npm config set registry <registry-url>
:修改包下载源,此例修改为淘宝镜像。该命令可以更改NPM的默认源为其他镜像源,例如淘宝镜像。npm info <package-name>
:查看远程npm上指定包的所有版本信息。该命令会返回指定包的详细信息,包括版本号、发布时间等。