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”。对于lint
或test
脚本,它应识别正在检查或测试的项目。对于start
脚本,它应识别哪个服务器正在启动。
目标可以引用受影响的文件扩展名列表(例如cjs
或less
),用+
分隔。如果有多个扩展名,则列表应按字母顺序排列。当文件扩展名具有变体(例如,cjs
用于 CommonJS 和mjs
用于 ESM)时,可以使用扩展名的公共部分,而不是显式列出所有变体(例如,js
而不是cjs+jsx+mjs
)。
目标不应引用执行操作的工具的名称(eleventy
、webpack
等)。
选项
不适合其他修饰符的其他选项。
监视
如果脚本监视文件系统并响应更改,则将:watch
添加到脚本名称。