Appearance
Monorepo中的ESLint
共享配置
在多个工作区之间共享 ESLint 配置可以使所有工作区更加一致,从而大大提高工作效率。
让我们想象一个这样的 monorepo:
apps
├─ docs
│ ├─ package.json
│ └─ .eslintrc.js
└─ web
├─ package.json
└─ .eslintrc.js
packages
└─ eslint-config-custom
├─ index.js
└─ package.json
我们有一个名为 eslint-config-custom 的包,还有两个应用程序,每个应用程序都有自己的 .eslintrc.js。
eslint-config-custom 包
我们的 eslint-config-custom 文件只包含一个单独的文件 index.js。是这个样子的:
js
module.exports = {
extends: ['next', 'turbo', 'prettier'],
rules: {
'@next/next/no-html-link-for-pages': 'off'
}
}
这是典型的 ESLint 配置,没什么花哨的。这个 package.json 看起来是这样的:
json
{
"name": "eslint-config-custom",
"main": "index.js",
"version": "1.0.0",
"dependencies": {
"eslint": "latest",
"eslint-config-next": "latest",
"eslint-config-prettier": "latest",
"eslint-plugin-react": "latest",
"eslint-config-turbo": "latest"
}
}
这里有两点值得注意。首先,主字段指向 index.js。这允许文件轻松导入此配置。
其次,这里列出了 ESLint 依赖项。这个很有用 —— 这意味着我们不需要在导入 eslint-config-custom 的应用程序中重新指定依赖项。
如何使用 eslint-config-custom 包
在我们的 web 应用程序中,我们首先需要添加 eslint-config-custom 作为一个依赖项。
json
{
"dependencies": {
"eslint-config-custom": "*"
}
}
json
{
"dependencies": {
"eslint-config-custom": "*"
}
}
json
{
"dependencies": {
"eslint-config-custom": "workspace:*"
}
}
然后我们可以这样导入配置:
js
// apps/web/.eslintrc.js
module.exports = {
root: true,
extends: ['custom']
}
通过将 custom 添加到 extends 数组中,我们告诉 ESLint 寻找一个名为 eslint-config-custom 的包,它会找到我们的工作区。
概要
默认情况下,当您使用 npx create-turbo@latest 创建一个新的 Monorepo 时,此设置会附带。您还可以查看我们的基本示例来查看工作版本。
设置 lint 任务
我们建议按照基础部分的设置进行操作。但要做一个修改,每个 package.json 脚本应该是这样的:
json
// packages/*/package.json
{
"scripts": {
"lint": "eslint"
}
}