0

0

聊聊如何使用package.json对依赖包进行版本管理

青灯夜游

青灯夜游

发布时间:2022-08-09 15:08:49

|

3264人浏览过

|

来源于掘金社区

转载

本篇文章聊聊前端项目的实战中,是如何使用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.13.0.2

  • latest:安装最新的稳定版本

1.png

  • 例如"express": "latest",可以安装4.18.1  (2022.06.13最新版本)。

  • *:安装最新发布的版本,不一定是稳定版本

    JTBC网站内容管理系统5.0.3.1
    JTBC网站内容管理系统5.0.3.1

    JTBC CMS(5.0) 是一款基于PHP和MySQL的内容管理系统原生全栈开发框架,开源协议为AGPLv3,没有任何附加条款。系统可以通过命令行一键安装,源码方面不基于任何第三方框架,不使用任何脚手架,仅依赖一些常见的第三方类库如图表组件等,您只需要了解最基本的前端知识就能很敏捷的进行二次开发,同时我们对于常见的前端功能做了Web Component方式的封装,即便是您仅了解HTML/CSS也

    下载

2.png

  • 例如"mongoose": "*",可以安装6.0.0-rc23.9.7等。

  • Git URL:使用Git上发布的包

    引用格式: ://[[:]@][:][:][/][# | #semver:]

"test": "git+ssh://git@github.com:npm/cli.git#v1.0.27"

扩展阅读:npm docs - 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字段声明的依赖,在npm install 工具包时,是不会安装的。必须在dependencies字段中声明,才会被安装。

devDependencies

生产环境不需要使用的依赖,都需要安装在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

当开发一些插件和工具包时,对使用方的运行环境的依赖包版本有要求,可以使用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 教程

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

0

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

10

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

32

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

15

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

42

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

6

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 18.8万人学习

第二十四期_前端开发
第二十四期_前端开发

共161课时 | 4.4万人学习

Composer与自制MVC框架
Composer与自制MVC框架

共8课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号