创建插件
每个插件都是以 eslint-plugin-<plugin-name>
为名的 npm 模块,例如 eslint-plugin-jquery
。你也可以使用 @<scope>/eslint-plugin-<plugin-name>
格式的范围包,如 @jquery/eslint-plugin-jquery
以及 @<scope>/eslint-plugin
,如 @jquery/eslint-plugin
。
创建插件
要想创建一个插件的最简单方法是使用 Yeoman 生成器。该生成器将引导你创建插件骨架。
插件中的规则
插件可以为 ESLint 提供额外的规则。要做到这一点,插件必须输出 rules
对象,其中包含一个规则 ID 到规则的键值映射。规则 ID 不需要遵循任何命名惯例(例如,它可以只是 dollar-sign
)。
module.exports = {
rules: {
"dollar-sign": {
create: function (context) {
// 规则实现……
}
}
}
};
要在 ESLint 中使用这个规则,你需要使用没有前缀的插件名称,后面是一个斜线,然后是规则名称。因此,如果这个插件被命名为 eslint-plugin-myplugin
,那么在你的配置中,你就可以使用 myplugin/dollar-sign
来引用这个规则。例如:"rules": {"myplugin/dollar-sign": 2}
。
插件中的环境
插件可以暴露额外的环境,以便在 ESLint 中使用。要做到这一点,插件必须输出一个 environments
对象。environments
对象的键是所提供的不同环境的名称,其值是环境设置。比如说:
module.exports = {
environments: {
jquery: {
globals: {
$: false
}
}
}
};
这个插件中定义了 jquery
环境。要在 ESLint 中使用这个环境,你需要使用没有前缀的插件名称,后面是一个斜线,然后是环境名称。因此,如果这个插件被命名为 eslint-plugin-myplugin
,那么你将在配置中设置环境为 "myplugin/jquery"
。
插件环境可以定义以下对象:
globals
- 在配置文件中扮演同样的globals
。键是 globals 的名字,值是true
,允许覆盖 global,false
,不允许覆盖。parserOptions
- 与配置文件中的parserOptions
作用相同。
插件中的处理器
你也可以创建插件,告诉 ESLint 如何处理 JavaScript 以外的文件。为了创建一个处理器,从你的模块导出的对象必须符合以下接口:
你可以通过在 processors
键中包含处理器函数来为插件添加处理器。关于定义自定义处理器的更多信息,请参考自定义处理器。
module.exports = {
processors: {
// This processor will be applied to `*.md` files automatically.
".md": {
preprocess(text, filename) { /* ... */ },
postprocess(messages, filename) { /* ... */ }
}
"processor-name": {
preprocess: function(text, filename) {/* ... */},
postprocess: function(messages, filename) { /* ... */ },
}
}
}
插件中的配置
你可以通过在 configs
键下指定配置,将其捆绑在一个插件内。当你想提供的不仅仅是代码风格,还有一些自定义的规则来支持它时,这可能很有用。每个插件支持多个配置。请注意,不可能为一个给定的插件指定一个默认的配置,用户必须在他们的配置文件中指定,当他们想使用一个配置。
// eslint-plugin-myPlugin
module.exports = {
configs: {
myConfig: {
plugins: ["myPlugin"],
env: ["browser"],
rules: {
semi: "error",
"myPlugin/my-rule": "error",
"eslint-plugin-myPlugin/another-rule": "error"
}
},
myOtherConfig: {
plugins: ["myPlugin"],
env: ["node"],
rules: {
"myPlugin/my-rule": "off",
"eslint-plugin-myPlugin/another-rule": "off",
"eslint-plugin-myPlugin/yet-another-rule": "error"
}
}
}
};
如果上面的示例插件名为 eslint-plugin-myPlugin
,那么就可以分别通过 "plugin:myPlugin/myConfig"
和 "plugin:myPlugin/myOtherConfig"
使用 myConfig
和 myOtherConfig
配置。
{
"extends": ["plugin:myPlugin/myConfig"]
}
注意:请注意,配置将不会默认启用插件的任何规则,而应被视为一个独立的配置。这意味着你必须在 plugins
数组中指定你的插件名称,以及你想启用的属于该插件的任何规则。任何插件规则必须以短或长的插件名称为前缀。参见配置插件获取更多信息。
对等依赖
为了明确该插件需要 ESLint 才能正常工作,你必须在你的 package.json
中将 ESLint 声明为 peerDependency
。
该插件的支持是在 ESLint 0.8.0
版本中引入的。确保 peerDependency
指向 ESLint 0.8.0
或更高版本。
{
"peerDependencies": {
"eslint": ">=0.8.0"
}
}
测试
ESLint 提供了 RuleTester
工具,以便测试插件规则。
筛选
ESLint 插件也应该要进行检查!建议使用以下插件的 recommended
配置对你的插件进行检查:
分享插件
为了让社区都可以使用使你的插件,你必须在 npm 上发布它。
推荐的关键词有:
eslint
eslintplugin
在你的 package.json
文件中加入这些关键词,以便别人容易找到。