我正在使用
nx
来管理 monorepo,发现 nx
项目有很多目标,例如@nx/eslint:lint
。
此目标可以在
project.json
中定义,由 nx
管理:
"targets": {
"lint": {
"executor": "@nx/eslint:lint",
"inputs": [
"{projectRoot}/**/*.ts"
],
...
我还可以添加
eslint
对 package.json 的依赖并添加如下脚本:
scripts: {
"lint": "eslint src"
...
我想知道使用
@nx/eslint:lint
和原生 eslint
命令之间有什么根本区别。
首先,通过在
package.json
中添加脚本,您可以在 monorepo 中的所有代码上运行 eslint,但您可以一次在 monorepo 的每个包上运行它。
这样做的一个好处是,当您一次在每个包上运行它时,您可以利用 NX 缓存,如果包内的代码没有更改,它将重新使用成功的结果。但是,还有其他原因。
因此,使用目标可以让您连接 NX 提供的所有工具,以便能够在 monorepo 中的所有包上一致且智能地运行
lint
。
其次,您可以使用 JSON 文件来配置该目标的运行方式。
@nx/eslint:lint
目标支持相当多的选项。请参阅文档:https://nx.dev/nx-api/eslint/executors/lint#options
虽然您可以将所有这些编码为脚本调用中的命令行参数,但当有很多选项时,它会变得很难维护。