版本

Package.json 约定

以下内容适用于 package.json 文件的 “scripts” 部分。

名称

npm 脚本名称必须仅包含小写字母,使用 : 分隔部分,使用 - 分隔单词,以及使用 + 分隔文件扩展名。每个部分名称应该是完整的英语单词(例如 coverage 而不是 cov)或全小写的众所周知的首字母缩写词(例如 wasm)。

以下是 ABNF 中提案的摘要。

name         = life-cycle / main target? option* ":watch"?
life-cycle   = "prepare" / "preinstall" / "install" / "postinstall" / "prepublish" / "preprepare" / "prepare" / "postprepare" / "prepack" / "postpack" / "prepublishOnly"
main         = "build" / "lint" ":fix"? / "release" / "start" / "test" / "fetch"
target       = ":" word ("-" word)* / extension ("+" extension)*
option       = ":" word ("-" word)*
word         = ALPHA +
extension    = ( ALPHA / DIGIT )+

顺序

脚本名称必须按照字母顺序出现在 package.json 文件中。本文档中概述的其他约定确保字母顺序与逻辑分组一致。

主要脚本名称

除了 npm 生命周期脚本 之外,所有脚本名称必须以以下名称之一开头。

构建

从源代码和/或数据生成一组文件的脚本的名称必须以 build 开头。

如果一个包包含任何 build:* 脚本,则可能有一个名为 build 的脚本。如果是这样,build 脚本应该产生与单独运行每个 build:* 脚本相同的输出。它必须产生运行这些脚本的输出的子集。

获取

从外部数据或资源生成一组文件的脚本的名称必须以 fetch 开头。

如果一个包包含任何 fetch:* 脚本,则可能有一个名为 fetch 的脚本。如果是这样,fetch 脚本应该产生与单独运行每个 fetch:* 脚本相同的输出。它必须产生运行这些脚本的输出的子集。

发布

具有公共副作用的脚本(发布网站、提交到 Git 等)必须以 release 开头。

代码检查

静态分析文件的脚本(主要是但不限于运行 eslint 本身)的名称必须以 lint 开头。

如果一个包包含任何 lint:* 脚本,则应该有一个名为 lint 的脚本,并且它必须运行如果单独调用每个 lint:* 脚本将会运行的所有检查。

如果修复可用,则 linter 必须不应用修复,除非脚本包含 :fix 修饰符(见下文)。

启动

start 脚本用于启动服务器。截至撰写本文时,没有 ESLint 包有多个 start 脚本,因此 start 不需要任何修饰符。

测试

执行代码以确保实际行为与预期行为匹配的脚本的名称必须以 test 开头。

如果一个包包含任何 test:* 脚本,则应该有一个名为 test 的脚本,并且它必须运行如果单独调用每个 test:* 脚本将会运行的所有测试。

测试脚本不应包含代码检查。

测试脚本应在可能的情况下报告测试覆盖率。

修饰符

以下一个或多个修饰符可以附加到上面的标准脚本名称。如果目标有修饰符,它们必须按照它们在下面出现的顺序排列(例如 lint:fix:js:watch 而不是 lint:watch:js:fix)。

修复

如果 linter 可以修复它发现的问题,请添加一个脚本副本,并在末尾附加 :fix,该副本也进行修复。

目标

正在运行的操作的目标名称。在 build 脚本的情况下,它应该标识构建工件,例如 “javascript” 或 “css” 或 “website”。在 linttest 脚本的情况下,它应该标识正在 lint 或测试的项目。在 start 脚本的情况下,它应该标识正在启动的服务器。

目标可以引用受影响的文件扩展名列表(例如 cjsless),用 + 分隔。如果存在多个扩展名,则列表应按字母顺序排列。当文件扩展名具有变体时(例如 CommonJS 的 cjs 和 ESM 的 mjs),可以使用扩展名的公共部分,而不是显式列出所有变体(例如 js 而不是 cjs+jsx+mjs)。

目标不应引用执行操作的工具的名称 (eleventy, webpack 等)。

选项

不适合其他修饰符的其他选项。

监听

如果脚本监视文件系统并响应更改,请将 :watch 添加到脚本名称。

更改语言