ste*_*eve 3 eslint angular typescript-eslint angular-eslint
\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n我已将 ESLint 规则集作为包下载并安装到我当前的项目中。我下载的规则集用于向项目环境添加对 Angular、TypeScript(当然还有 ECMAScript)的 ESLint 支持。我想创建一个 ESLint 配置,其中包含我需要从事该项目的开发人员遵守的“标准化代码风格”。
\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n首先我添加了plugin:@typescript-eslint/recommended. 后来我决定做出改变,我转而使用plugin:@angular-eslint/recommended. 我认为Angular-eslint-recommended扩展了 TS-ESLint 插件的规则集:plugin:@typescript-eslint/recommended但实际上,它仅扩展了插件:@typescript-eslint。
问题:可以扩展多个规则集吗?扩展\n plugin:@typescript-eslint/recommended&plugin:@angular-eslint/recommended是否是我为 TS-Angular 项目提供适当的 Linting 支持所需的所有规则?
\n
\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0\n这是因为规则集会覆盖位于其之后的其他规则集,换句话说;您放置在.eslintrc.json文件"extends": []数组字段中的第一个规则集将优先于也使用该"extends"字段扩展的所有其他规则集。
\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0\n当有两个或更多规则集被扩展时,就有可能有 2 个或更多规则相互冲突。事实上,当开始扩展 3 或 4 个规则集时,这几乎是一个保证。这个问题可以通过根据规则集在文件中的放置顺序创建层次结构来.eslintrc.json解决"extends"字段中的放置顺序创建层次结构,可以解决此问题。规则只能配置一次,因此当两个规则集尝试配置它们时,位于层次结构顶部的规则集将其配置应用于该规则,尝试配置该规则的所有其他规则集将应用到该规则。对于冲突的规则,ESLint 会忽略它(并且仅对于冲突的规则)。层次结构基于扩展字段扩展规则集的顺序,因此它是一个非常线性的军事风格层次结构。\n在美国军队中,中尉向中士发出命令,中士向列兵发出命令。它是一个线性的指挥链。
"extends": ["Top priority", "2nd priority", "Has no priority"]您可以看到,当扩展 3 个规则集时,第一个规则集优先于其他两个规则集,而第三个规则集没有优先级。
\n假设有一条规则叫做"no-understating-jD3VS-awesomeness"
假设此规则是基本 ESLint 规则,您不需要插件即可访问它。它始终可用。
\n现在假设您将以下内容添加到您的.eslintrc.json字段"extends"中
"extends": [\n "eslint:recommended", \n "plugin:@angular-eslint/recommended", \n "plugin:@typescript-eslint/recommended"\n ]\nRun Code Online (Sandbox Code Playgroud)\n"eslint:recommended"设置以下内容: \n "rules": {\n "no-understating-jD3VS-awesomeness": "error"\n }\nRun Code Online (Sandbox Code Playgroud)\n"plugin:@angular-eslint/recommended"设置以下内容: \n "rules": {\n "no-understating-jD3VS-awesomeness": "off"\n }\nRun Code Online (Sandbox Code Playgroud)\n"plugin:@typescript-eslint/recommended"设置以下内容: \n "rules": {\n "no-understating-jD3VS-awesomeness": "error"\n }\nRun Code Online (Sandbox Code Playgroud)\n"no-understating-jDEVS-awesomeness"将被设置为,"error"因为扩展规则集"eslint:recommended"首先放置在扩展数组中。
假设我们移动了"eslint:recommended",扩展字段如下所示:
"extends": [\n "plugin:@angular-eslint/recommended", \n "plugin:@typescript-eslint/recommended"\n "eslint:recommended", \n ]\nRun Code Online (Sandbox Code Playgroud)\n在这种情况下,"no-understating-jDEVS-awesomeness"将被禁用(也称为设置为"off"),因为现在“plugin:@angular-eslint/recommended”优先于其他规则集。
在讨论的这一点上,很明显,当您配置字段时,extends您需要意识到每个规则集的放置位置。
正如本摘录标签中所述,
\n\n\n“有充分的理由优先考虑特定的规则集”。
\n
一般来说(当然也有极少数例外),您将希望插件规则集覆盖配置本机 ESLint 规则的规则集。因此,如果您要使用eslint:recommendedand @typescript-eslint/plugin:recommended,则需要先添加后者( @typescript-eslint/plugin:recommended),因为它改变了某些 eslint 规则的工作方式,以便 eslint 可以与 TS 一起使用。如果您以相反的方式这样做,您将使用 eslint 规则覆盖“ts-eslint/plugin”规则集,这将完全破坏首先安装“ts-eslint/plugin”的整个目的。
plugin:@angular-eslint/recommended现在,就询问是否contains而言,可以在Packages Repo"plugin:@typescript-eslint/recommended"中找到答案。从表面上看,它将旧的(现已弃用)TSLint 规则转换为 ESLint/Angular 规则。这可能是在 TypeScript/ESLint 插件首次发布之前就给了他的包 TS 支持。
简短的回答是,不,不是。
\n不过,为了将来的参考,你问的问题是一个好问题,因为我很确定当你扩展一个简单的 ESLint 规则列表的规则集时,它不能扩展其他规则集,但是,当规则集是来自 ESLint-Plugin 的规则集时,该插件可以内置来自其他插件的规则,因此在这种情况下可以很好地扩展。
\n重要的是您要知道,还有ESLint-Config-Angular存储库,我相信它也扩展了 ESLint/Angular 插件的规则集。只要确保您不会将它们与您正在扩展的规则集(这是我在上面共享的几个段落的链接中的插件)混淆即可。
\n我还没有看到回购协议,
\n希望这一切都有道理。
\n| 归档时间: |
|
| 查看次数: |
2346 次 |
| 最近记录: |