共享配置 (已弃用)
要共享您的 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'
};
在最后一个文件中,再次看到要正确解析您的配置,您需要包含完整包路径。