分叉核心 eslint 规则
Forking core eslint rules
我想对核心 eslint 规则做一些小的修改,例如array-bracket-newline
,或 indent
。这些规则通常取决于 eslint
中的实用程序,最常见的是 ast-utils
。到目前为止,我已经使用了一个插件,在那里添加了修改后的规则,并做了 require('eslint/lib/rules/utils/ast-utils')
,因为 eslint
无论如何都是对等依赖。
因为 https://github.com/eslint/eslint/commit/24c9f2ac57efcd699ca69695c82e51ce5742df7b 这不再可能,因为 exports
指令被添加到 package.json
。现在更改核心 eslint 规则行为的常用方法是什么?
- 复制所有依赖项是可能的,但既乏味又无缘无故地重复代码(我必须跟踪所有依赖项,并撕掉 eslint 的代码块)。
- 分叉
eslint
作为一个整体似乎不干净,因为还有很多其他部分依赖于它(从 eslint-plugins 开始,到 vscode 扩展,yarn sdks,. ..).每个都需要更改,或者使用一些非常肮脏的重命名,其中叉子假装是原始的(等待发生事故)。
- yarn 包修补
exports
看起来真的很脏。
有什么干净的方法吗?
编辑:我目前最好的想法是分叉 eslint
,删除 exports
,然后在分叉上使用 require('eslint-fork/lib/rules/utils/ast-utils')
。这意味着我无缘无故需要一个额外的 eslint
副本,但它是为了 linting,一点磁盘 space 并不重要。
可以通过完整路径要求未导出的文件,即:
const { dirname, join } = require('path');
const astUtilsPath = join(dirname(require.resolve('eslint')), 'rules/utils/ast-utils.js');
const astUtils = require(astUtilsPath);
请注意,此方法依赖于位于特定包文件夹中的主要导出('lib' 在 eslint 的情况下)。
我想对核心 eslint 规则做一些小的修改,例如array-bracket-newline
,或 indent
。这些规则通常取决于 eslint
中的实用程序,最常见的是 ast-utils
。到目前为止,我已经使用了一个插件,在那里添加了修改后的规则,并做了 require('eslint/lib/rules/utils/ast-utils')
,因为 eslint
无论如何都是对等依赖。
因为 https://github.com/eslint/eslint/commit/24c9f2ac57efcd699ca69695c82e51ce5742df7b 这不再可能,因为 exports
指令被添加到 package.json
。现在更改核心 eslint 规则行为的常用方法是什么?
- 复制所有依赖项是可能的,但既乏味又无缘无故地重复代码(我必须跟踪所有依赖项,并撕掉 eslint 的代码块)。
- 分叉
eslint
作为一个整体似乎不干净,因为还有很多其他部分依赖于它(从 eslint-plugins 开始,到 vscode 扩展,yarn sdks,. ..).每个都需要更改,或者使用一些非常肮脏的重命名,其中叉子假装是原始的(等待发生事故)。 - yarn 包修补
exports
看起来真的很脏。
有什么干净的方法吗?
编辑:我目前最好的想法是分叉 eslint
,删除 exports
,然后在分叉上使用 require('eslint-fork/lib/rules/utils/ast-utils')
。这意味着我无缘无故需要一个额外的 eslint
副本,但它是为了 linting,一点磁盘 space 并不重要。
可以通过完整路径要求未导出的文件,即:
const { dirname, join } = require('path');
const astUtilsPath = join(dirname(require.resolve('eslint')), 'rules/utils/ast-utils.js');
const astUtils = require(astUtilsPath);
请注意,此方法依赖于位于特定包文件夹中的主要导出('lib' 在 eslint 的情况下)。