一、package.json是什么?
package.json文件是一个JSON对象,从后缀名.json就可以看出,该对象的每一个成员就是当前项目的一项设置,比如name就是项目名称,version是项目版本号。
二、配置字段详细剖析
1. name
package.json文件中最重要的就是name和version字段,这两项是必填的。名称和版本一起构成一个标识符,该标识符被认为是完全唯一的。对包的更改应该与对版本的更改一起进行。
name必须是字符串,不能以.或_开头,不能有大写字母,因为名称最终成为URL的一部分因此不能包含任何非URL安全字符。 npm官方建议我们不要使用与核心节点模块相同的名称。不要在名称中加js或node。
"name": "app-top-custom-plugin",
2. version
Version项目版本号, x.x.x的格式, 符合语义化版本规则(遵循“大版本.次要版本.小版本”的格式规定),在项目每次发布时需提交新的且唯一版本号
"version": "0.1.0",
3. description
项目描述信息,description是字符串.
4. private
设为 true 时,项目不会被发布到 npm。
5. scripts
定义可运行的脚本命令
"scripts": {
"start": "node index.js",
"build": "webpack",
"test": "jest"
},
6. dependencies
项目运行所需的依赖包,通过 npm install <package> 安装。
依赖版本号前的符号的含义:
-
^(插入符号)
-
含义: 允许安装与指定版本兼容的最新版本,但不升级主版本号。
-
规则:
^17.0.2表示允许安装17.x.x的最新版本,但不会升级到18.0.0。- 具体范围:
>=17.0.2 <18.0.0。
-
用途: 推荐使用,确保兼容性同时允许修复 Bug 和添加新功能。
-
~(波浪符号)
-
含义: 允许安装与指定版本兼容的最新版本,但不升级次版本号。
-
规则:
~17.0.2表示允许安装17.0.x的最新版本,但不会升级到17.1.0。- 具体范围:
>=17.0.2 <17.1.0。
-
用途: 适用于需要更严格版本控制的场景。
-
无符号(精确版本)
-
含义: 只安装指定版本。
-
规则:
17.0.2表示只安装17.0.2,不会安装其他版本。
-
用途: 适用于需要完全锁定版本的场景。
-
>、<、>=、<=(比较符号)
-
含义: 指定版本范围。
-
规则:
>17.0.2:大于17.0.2。<17.0.2:小于17.0.2。>=17.0.2:大于或等于17.0.2。<=17.0.2:小于或等于17.0.2。
-
用途: 用于自定义版本范围。
-
*(通配符)
-
含义: 允许安装任何版本。
-
规则:
*表示安装最新版本。17.*表示安装17.x.x的最新版本。
-
用途: 不推荐使用,可能导致版本冲突。
-
x或X(通配符)
-
含义: 允许指定位置的任意版本。
-
规则:
17.x或17.X表示17.x.x的最新版本。17.0.x表示17.0.x的最新版本。
-
用途: 类似于
~或^,但更灵活。
-
latest
-
含义: 安装最新版本。
-
规则:
latest表示安装当前发布的最新版本。
-
用途: 不推荐使用,可能导致不兼容。
示例:
{
"dependencies": {
"react": "^17.0.2", // 允许 17.x.x,但不包括 18.0.0
"lodash": "~4.17.21", // 允许 4.17.x,但不包括 4.18.0
"vue": "2.6.14", // 只安装 2.6.14
"axios": ">=0.21.1", // 安装 0.21.1 或更高版本
"express": "*" // 安装最新版本(不推荐)
}
}
7. devDependencies
开发环境所需的依赖包,通过 npm install <package> --save-dev 安装。
dependencies 和 devDependencies 的区别
8. license
项目的许可证类型,用于说明项目的开源许可协议。选择一个适合你项目的许可证类型,确保你的代码在法律上是合法和可信的。