我不理解我们为什么需要插件和扩展。它们之间有什么区别,我需要其中的哪一个吗?
extends使用一个配置文件,在将其添加到extends选项时应用一组规则。而插件则提供了一组规则,您可以根据需要单独应用这些规则。仅拥有插件并不强制执行任何规则,您必须选择需要哪些规则。
插件可以提供零个、一个或多个配置文件。如果插件提供配置文件,则可以在将插件添加到插件部分后,在扩展部分加载该配置文件。
因此,插件为您提供了一些编码过的规则,您可以选择哪些规则是相关的。它还可以提供配置文件以应用作者认为逻辑上分组/相关的规则,但是插件不必提供配置文件。另一方面,extends基于配置文件规范提供了批量应用规则的能力。
eslint-plugin-react
{
"plugins": [
"react"
],
"extends": [
"eslint:recommended",
"plugin:react/recommended"
]
}
eslint-config-google
{
"extends": [
"google"
]
}
extends
一般来说是关于扩展配置,不仅限于插件。可能的值有:
"eslint:recommended"
"eslint:all"
eslint-config-xxx
或作用域名称)eslint-plugin-xxx
或作用域名称)"./my/path/.eslintrc.js"
插件表示法:plugin:<package name>/<configuration name>
,例如对于eslint-plugin-react
:
"extends": ["plugin:react/recommended"]
通过扩展插件配置,我们可以获取推荐的规则而不需要手动添加它们。
plugins
插件是一种特殊的 eslint npm 包,提供了附加的规则定义(rules
)、environments
、processors
和 configs
,用于不同配置的推荐/默认规则值。
.eslintrc.js
文件中的plugins
属性只是一个标志,在使用npm i
安装后启用给定的插件。现在可以引用插件的规则,但必须手动设置所有的rules
值。
把plugins
看作是激活插件的一种方式——在每种情况下都需要将插件添加到链中一次以使用其规则。
如果已经在通过extends
继承的配置中定义了plugins
,则在自己的配置中不需要再次定义。
例如:
eslint-plugin-react
已经包含了plugins: [ 'react' ]
,因此在自己的配置中不再需要这个条目,直接使用插件规则即可。
extends
属性,则不必使用plugins
属性。但是,如果您想设置自定义规则,则应使用plugins
属性。这是正确的吗? - Rami Chasygovplugins
下提及该插件(将plugins
视为激活插件的一种方式)。虽然您不需要在自己的配置中使用plugins
,但如果它已经在通过extends
扩展的配置中定义,则需要。请参见上面的eslint-plugin-react
插件示例,其中已经包含了plugins:['react']
。 - ford04npm install eslint-plugin-react
并希望在自己的 eslintrc.js
中使用其配置,则必须首先定义 plugins: ['react']
,然后才能使用 extends: ['plugin:react/recommended']
- 因此我确实需要在自己的配置中声明该插件。你是否描述了一个更具体的情况:如果我扩展了另一个插件,该插件本身使用了 eslint-plugin-react
- 例如:eslint-plugin-using-react
,那么我就不需要在自己的配置中激活 react 插件,因为我已经在自己的配置中有了 plugins: [plugin-using-react]
和 extends: [plugin:using-react/recommended]
? - tonywoodeeslint-plugin-react
对我来说很好用,而且不需要将其包含在plugins
中。我只需要添加extends: [ 'plugin:react/recommended' ]
就可以了。如果我想要覆盖某个规则,我会使用rules: { 'react/react-in-jsx-scope': 'off' }
,所以我真的不明白为什么需要plugins
。 - Cathal Mac Donnacha我发现插件可以增加额外的功能,而extends提供了一个基线,可以添加自己的自定义规则。感谢我的朋友奥利弗帮助我回答这个问题!
extends
。 - Qwertyextends: ['plugin:react/recommended']
,而没有将它添加到plugins: []
部分中。 - Alexander Kimextends
时,不需要将插件添加到plugins
中,我可以使用extends: ['plugin:prettier/recommended']
而无需将prettier添加到plugins
中。 - Bagaskara