package.json 指南(含版本号说明)

2,275 阅读3分钟

参考

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.10.13.2 等,但不能更新到 0.14.0 或更高版本

如果写入的是 ^1.13.0,则当运行 npm update 时,可更新到 1.13.11.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 :关键字,使用可用的最新版本