共享配置 (已弃用)
要共享您的 ESLint 配置,请创建一个**可共享配置**。您可以将可共享配置发布到npm,以便其他人可以下载并在其 ESLint 项目中使用它。
此页面说明如何创建和发布可共享配置。
创建可共享配置
可共享配置只是导出配置对象的 npm 包。首先,创建一个 Node.js 模块,就像您平时一样。
模块名称必须采用以下其中一种形式
- 以
eslint-config-
开头,例如eslint-config-myconfig
。 - 是 npm 范围模块。要创建一个范围模块,请使用
@scope/eslint-config
命名或前缀模块,例如@scope/eslint-config
或@scope/eslint-config-myconfig
。
在您的模块中,从模块的main
入口点文件导出可共享配置。默认的入口点是index.js
。例如
// index.js
module.exports = {
globals: {
MyGlobal: true
},
rules: {
semi: [2, "always"]
}
};
由于index.js
文件只是 JavaScript,因此您可以从文件中读取这些设置或动态生成它们。
发布可共享配置
可共享配置准备就绪后,您可以将其发布到 npm以与他人共享。我们建议在package.json
文件中使用eslint
和eslintconfig
关键字,以便其他人可以轻松找到您的模块。
您应该在package.json
中使用peerDependencies字段声明您对 ESLint 的依赖关系。推荐的方法是使用“>=”范围语法声明依赖关系以实现面向未来的兼容性,并使用最低所需的 ESLint 版本。例如
{
"peerDependencies": {
"eslint": ">= 3"
}
}
如果您的可共享配置依赖于插件,您也应该将其指定为peerDependency
(插件将相对于最终用户的项目加载,因此最终用户需要安装他们需要的插件)。但是,如果您的可共享配置依赖于自定义解析器或其他可共享配置,则可以在package.json
中将这些包指定为dependencies
。
您还可以在发布之前在您的计算机上测试您的可共享配置,方法是将您的模块全局链接。键入
npm link
然后,在想要使用可共享配置的项目中,键入
npm link eslint-config-myconfig
请务必将eslint-config-myconfig
替换为您模块的实际名称。
使用可共享配置
要使用可共享配置,请在配置文件的extends
字段中包含配置名称。对于值,请使用您的模块名称。例如
{
"extends": "eslint-config-myconfig"
}
您也可以省略eslint-config-
,ESLint 会自动推断。
{
"extends": "myconfig"
}
您不能将可共享配置与 ESLint CLI --config
标志一起使用。
npm 范围模块
npm 范围模块也以多种方式支持。
您可以使用模块名称
{
"extends": "@scope/eslint-config"
}
您也可以省略eslint-config
,ESLint 会自动推断。
{
"extends": "@scope"
}
模块名称也可以自定义。例如,如果您有一个名为@scope/eslint-config-myconfig
的包,则可以将配置指定为
{
"extends": "@scope/eslint-config-myconfig"
}
您也可以省略eslint-config
将配置指定为
{
"extends": "@scope/myconfig"
}
覆盖来自可共享配置的设置
您可以通过将设置直接添加到您的.eslintrc
文件中来覆盖来自可共享配置的设置。
共享多个配置
您可以在同一个 npm 包中共享多个配置。通过按照创建可共享配置部分中的说明为包指定默认配置。您可以通过向 npm 包添加新文件,然后从您的 ESLint 配置中引用它来指定其他可共享配置。
例如,您可以在 npm 包的根目录中创建一个名为my-special-config.js
的文件并导出配置,例如
// my-special-config.js
module.exports = {
rules: {
quotes: [2, "double"]
}
};
然后,假设您使用的是包名eslint-config-myconfig
,您可以通过以下方式访问其他配置:
{
"extends": "myconfig/my-special-config"
}
当使用范围模块时,无法省略eslint-config
命名空间。这样做会导致如上所述的解析错误。假设包名为@scope/eslint-config
,则可以按以下方式访问其他配置:
{
"extends": "@scope/eslint-config/my-special-config"
}
请注意,您可以从文件名中省略.js
。
**重要:**我们强烈建议始终为您的插件包含一个默认配置以避免错误。
本地配置文件解析
如果您需要创建多个可以相互扩展并位于不同目录中的配置,则可以创建一个处理这种情况的单个可共享配置。
例如,假设您使用的是包名eslint-config-myconfig
,并且您的包看起来像这样
myconfig
├── index.js
└─┬ lib
├── defaults.js
├── dev.js
├── ci.js
└─┬ ci
├── frontend.js
├── backend.js
└── common.js
在index.js
文件中,您可以执行以下操作:
module.exports = require('./lib/ci.js');
现在在包中,您有/lib/defaults.js
,其中包含
module.exports = {
rules: {
'no-console': 1
}
};
在/lib/ci.js
中,您有
module.exports = require('./ci/backend');
在/lib/ci/common.js
中
module.exports = {
rules: {
'no-alert': 2
},
extends: 'myconfig/lib/defaults'
};
尽管位于完全不同的目录中,但您会看到所有extends
都必须使用完整包路径到您希望扩展的配置文件。
现在在/lib/ci/backend.js
中
module.exports = {
rules: {
'no-console': 1
},
extends: 'myconfig/lib/ci/common'
};
在最后一个文件中,再次看到要正确解析您的配置,您需要包含完整包路径。