Tip:本文主要讨论package.json的相关介绍。
首先我们先看一个package.json 简单示例
{
"name": "package-a",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {},
"author": "gaojian.superior",
"license": "ISC",
"dependencies": {
"lodash": "^4.17.15"
},
"devDependencies": {
"react": "^16.13.0"
},
"peerDependencies": {
"react": ">16.8.0"
}
}
我们主要关注三个部分:dependencies、devDependencies、peerDependencies。
dependencies & devDependencies & peerDependencies 的区别
dependencies
在我们的项目打包上线的时候会把dependencies内所有依赖的npm包,都打包进来。
devDependencies
在我们开发项目时所依赖的npm包,打包上线时不会打包devDependencies所依赖的包。
peerDependencies
开发工具、插件常用。在其它开发同学要引用我们所开发的npm包时,会先检查peerDependencies所依赖的npm包提示需要安装相关依赖,然后再去安装我们的npm包。简单来说就是想要使用这个npm包的前置依赖。
总结一下:
- 我们开发的时候:dependencies 和 devDependencies 内的npm包都会用到;
- 我们打上线包的时候:
- 打包时 dependencies 和 devDependencies 内都会用到
- 产出的包 只包含 dependencies 的
- 别人引用我们的npm包时:
- 检查我们npm包 package.json 的 peerDependencies 依赖,如果没有安装相关依赖则提示warning
- 安装我们npm包 以及 package.json 的 dependencies 依赖
常见依赖版本号的区别
我们讨论一下package.json中对包的依赖版本号代表什么区别:
"lodash": "1.0.0"
指定包版本必须为 1.0.0
"lodash": ">1.0.0"
指定包版本必须大于 1.0.0
"lodash": ">=1.0.0"
指定包版本必须大于等于 1.0.0
"lodash": "<1.0.0"
指定包版本必须小于 1.0.0
"lodash": "<=1.0.0"
指定包版本必须小于等于 1.0.0
"lodash": "~1.2.0"
指定包版本的大版本和次版本号必须相同,且不能低于该版本(例:1.2.0 和 1.2.5 均可,但是 1.3.0 和 2.2.0 不可以)
"lodash": "^1.2.0"
指定包版本的大版本号必须相同,且不能低于该版本(例:1.2.0 和 1.3.0 均可,但是 2.0.0 不可以)
"lodash": "1.2.x"
指定版本号的x位任意均可
"lodash": "*"
任意版本号均可
在我们 npm 或 yarn 安装的时候会根据 package.json 对不同包版本依赖会安装相似的版本。