package.json中各个属性用途

package.json主要定义的内容如下:

  • 项目名称、项目构建版本、许可证的定义;
  • 依赖定义(包括 dependencies 字段,devDependencies 字段);
  • 使用scripts字段指定运行脚本命令的 npm 命令行缩写。

name 字段
name 字段定义了模块的名称,其命名时需要遵循官方的一些规范和建议:

模块名会成为模块 url、命令行中的一个参数或者一个文件夹名称,任何非 url 安全的字符在模块名中都不能使用(我们可以使用 validate-npm-package-name 包来检测模块名是否合法);
语义化模块名,可以帮助开发者更快的找到需要的模块,并且避免意外获取错误的模块;
若模块名称中存在一些符号,将符号去除后不得与现有的模块名重复,例如:由于 react-router-dom 已经存在,react.router.dom、reactrouterdom 都不可以再创建。

name 字段不能与其他模块名重复,我们可以执行以下命令查看模块名是否已经被使用:
npm view
如果模块存在,可以查看该模块的一些基本信息;如果该模块名从未被使用过,则会抛出 404 错误。

version 字段
npm 包中的模块版本都需要遵循 SemVer 规范,该规范的标准版本号采用 X.Y.Z 的格式,其中 X、Y 和 Z 均为非负的整数,且禁止在数字前方补零:

  • X 是主版本号(major):修改了不兼容的 API
  • Y 是次版本号(minor):新增了向下兼容的功能
  • Z 为修订号(patch):修正了向下兼容的问题

当某个版本改动比较大、并非稳定而且可能无法满足预期的兼容性需求时,要先发布一个先行版本。

先行版本号可以加到主版本号.次版本号.修订号的后面,通过 – 号连接一连串以句点分隔的标识符和版本编译信息:

  • 内部版本(alpha)
  • 公测版本(beta)
  • 正式版本的候选版本rc(即 Release candiate)

可以执行以下命令查看模块的版本:

npm view <packageName> version # 查看某个模块的最新版本
npm view <packageName> versions # 查看某个模块的所有历史版本

描述信息(description & keywords)
description 字段用于添加模块的描述信息,便于用户了解该模块。
keywords 字段用于给模块添加关键字。
当使用 npm 检索模块时,会对模块中的 description 字段和 keywords 字段进行匹配。

简化终端命令(scripts)
scripts 字段是 package.json 中的一种元数据功能,它接受一个对象,对象的属性为可以通过 npm run 运行的脚本,值为实际运行的命令(通常是终端命令),如:

“scripts”: {
“start”: “node index.js”
},
将终端命令放入 scripts 字段,既可以记录它们又可以实现重用。

定义项目入口(main)
main 字段是 package.json 中的另一种元数据功能,它可以用来指定加载的入口文件。
假如项目是一个 npm 包,当用户安装此包后,require(‘my-module’) 返回的是 main 字段中所列出文件的 module.exports 属性。
当不指定main 字段时,默认值是模块根目录下面的index.js 文件。