共享配置(已弃用)
要共享您的 ESLint 配置,请创建一个可共享配置。您可以将您的可共享配置发布到 npm,以便其他人可以下载并在他们的 ESLint 项目中使用它。
此页面解释了如何创建和发布可共享配置。
创建可共享配置
可共享配置仅仅是导出配置对象的 npm 包。要开始,像往常一样创建一个 Node.js 模块。
模块名称必须采用以下形式之一
- 以
eslint-config-
开头,例如eslint-config-myconfig
。 - 成为 npm 作用域模块。要创建作用域模块,请使用
@scope/eslint-config
命名或前缀模块,例如@scope/eslint-config
或@scope/eslint-config-myconfig
。
在您的模块中,从模块的 main
入口点文件导出可共享配置。默认的 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
(插件将相对于最终用户的项目加载,因此最终用户需要安装他们需要的插件)。但是,如果您的可共享配置依赖于自定义解析器或另一个可共享配置,您可以将这些包指定为 dependencies
在 package.json
中。
您也可以在发布之前通过全局链接您的模块在您的计算机上测试您的可共享配置。输入
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'
};
在最后一个文件中,再次看到要正确解析您的配置,您需要包含完整的包路径。