参考
node.js package.json 指南:nodejs.cn/learn/the-p…
package.json 文件是项目的清单。 它可以做很多完全互不相关的事情。
例如,它可作为各工具的配置中心,也是 npm 和 yarn 存储所有已安装软件包的名称和版本的地方。
一、文件结构
{}
它是空的! 对于应用程序,package.json 文件中的内容没有固定的要求,这些配置都不是必须的。 唯一的要求是遵守 JSON 格式。
如果要构建要在 npm 上分发的 Node.js 软件包,则必须具有一组可帮助其他人使用它的属性。 稍后会详细介绍。
这是另一个 package.json:
{
"name": "nodejs_cn"
}
它定义了 name 属性,用于告知软件包的名称。
二、package.json支持的属性
{
# 名称(当软件包在npm上发布时,会使用该名称)
"name": "xxx",
# 作者
"author": "xxx",
"author": {
"name": "xxx",
"email": "xxx",
"url": "xxx"
},
# 贡献者(数组,每一项也和作者一样可用对象定义)
"contributors": ["xxx"],
# 链接到包的问题跟踪页面(最常用的是github issues)
"bugs": "url",
# 包的主页
"homepage": "url",
# 版本号
# 3个数字组成:仅修复缺陷的版本是补丁版本,引入向后兼容的更改的版本是次版本,具有重大更改的是主版本
"version": "1.0.0",
# 软件包许可证
"license": "MIT",
# 与包相关的关键字(帮助人们在npm网站找到你的软件包)
"keywords": ["xxx"]
# 描述(告知别人软件包的用途)
"description": "xxx",
# 链接到软件包仓库所在位置
"repository": "url"
# 可以显示设置版本控制系统
"repository": {
"type": "svn",
"url": "...",
}
# 程序的入口起点
# 当在其它应用中导入此软件包时,将从该位置搜索导出的模块
"main": "src/main.js",
# 私有(为true,可防止意外执行命令将包发布到npm社区)
"private": true,
# 定义了一组可运行的node脚本(用法:npm run xxx/yarn xxx)
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
},
# 该项目依赖的npm软件包列表
"dependencies": {
"react": "^17.0.2",
"react-dom": "^17.0.2",
},
# 作为开发依赖安装的npm包列表(当该项目被作为其它项目的依赖使用时,在开发依赖列表中的包,不会被安装)
"devDependencies": {
"less": "^4.1.2",
"less-loader": "^7",
},
# 设置该项目在哪个版本的node上运行(也可设置运行该项目需要的其它命令的版本)
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0",
"yarn": "^0.13.0"
}
# 用于告知该项目支持哪些浏览器(Babel等工具会用到它,以将对应的polyfill添加到编译代码中)
"browserslist": ["> 1%", "last 2 versions", "not ie <= 8"]
# 以上示例表示:支持使用率超过1%的所有浏览器、的最新2个主版本,但不含ie8及更低版本
# 其它命令特有属性
# package.json也可以承载命令特有配置,例如 Babel、ESLint 等
# 例如 eslintConfig、babel 属性,它们是命令特有的,可在相应命令/项目文档中找到如何使用它们
}
三、版本号
上述 version 字段、 dependencies 依赖列表中,都使用到了版本号:
# 3个数字组成:仅修复缺陷的版本是补丁版本,引入向后兼容的更改的版本是次版本,具有重大更改的是主版本
"version": "1.0.0",
npm 版本号由3个数字组成: {主版本}.{次版本}.{补丁版本}
当发布新的版本时,需遵循以下规则:
- 进行不兼容的 API 更改,升级主版本
- 以向后兼容的方式添加功能,升级次版本
- 以向后兼容的方式修复缺陷,升级补丁版本
该约定在所有编程语言中均被采用,每个 npm 软件包都必须遵守该约定,这一点非常重要,整个系统都依赖于此
因为 npm 设置了一些规则,用于指定软件包安装时,使用的版本
规则使用了这些符号:
^:只会执行不更改最左边非零数字的更新(不更改第一个非零数字)
如果写入的是
^0.13.0,则当运行npm update时,可更新到0.13.1、0.13.2等,但不能更新到0.14.0或更高版本如果写入的是
^1.13.0,则当运行npm update时,可更新到1.13.1、1.14.0等,但不能更新到2.0.0或更高版本
~:仅更新补丁版本
如果写入的是
〜0.13.0,则当运行npm update时,会更新到补丁版本:即0.13.1可以,但0.14.0不可以。
>:接受大于指定版本的任何版本>=:接受大于等于指定版本的任何版本<:接受小于指定版本的任何版本<=:接受小于等于指定版本的任何版本=:接受明确的版本(与不带符号,直接写版本号一样)-:接受指定范围的版本。例如:2.1.0 - 2.6.2||:或符号(且用空格即可)
例如
1.0.0 || >=1.1.0 <1.2.0:使用1.0.0或大于等于1.1.0但小于1.2.0的版本
latest:关键字,使用可用的最新版本