版本

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 脚本相同的输出。它**必须**生成从运行这些脚本获得的输出的子集。

获取

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

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

发布

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

代码检查

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

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

如果修复可用,则代码检查工具**不得**应用修复,**除非**脚本包含 :fix 修饰符(见下文)。

启动

start 脚本用于启动服务器。在撰写本文时,没有一个 ESLint 包具有多个 start 脚本,因此 start 无需任何修饰符。

测试

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

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

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

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

修饰符

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

修复

如果代码检查工具可以修复它发现的问题,请添加脚本的副本,并在末尾附加 :fix 以进行修复。

目标

正在运行的操作的目标名称。对于 build 脚本,它**应该**识别构建工件,例如“javascript”或“css”或“website”。对于 linttest 脚本,它**应该**识别正在检查或测试的项目。对于 start 脚本,它**应该**识别哪个服务器正在启动。

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

目标**不应**引用执行操作的工具的名称(eleventywebpack 等)。

选项

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

监视

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

更改语言