我想编写几个脚本来自动检测丢失的导入并根据根目录导入它们。将此脚本编写为 codemod 脚本还是带有 fix 选项的 eslint 规则更好?
问问题
284 次
2 回答
1
Codemods 用于迁移,而 linting 则永久存在,以提醒/警告您的开发人员他们在开发过程中可能犯的一些错误。两者可以一起使用。
对于您的情况,我认为您可以采取两种方法:
编写检测问题的 lint 规则和修复现有问题的 codemod。lint 规则确保开发人员将来不会错过这一点。
编写检测问题的 lint 规则以及
--fix
自动修复问题的选项。
我倾向于方法二,因为它更具前瞻性。您可能只想直接使用此no-unresolved
ESLint 规则,而不是编写自己的规则。在任何情况下,fix/codemod 都不是微不足道的,如果您的项目有很多目录和文件,它可能会影响性能。
于 2018-01-04T03:28:01.640 回答
0
您可以结合这两个世界并使用putout代码转换器,它可以用作eslint 的插件并且对编写非常有用codemods
,因为它具有所有需要的基础设施:
借助作用域,您可以轻松检测您使用的变量是否已声明。
这是一个plugin
满足您需要的示例:@putout/plugin-declare-undefined-variables它以这种方式工作:
import {template} from 'putout';
export const match = () => ({
'await readFile(__a, __b)': (vars, path) => {
return !path.scope.bindings.readFile;
}
});
export const replace = () => ({
'await readFile(__a, __b)': (vars, path) => {
const programScope = path.scope.getProgramParent();
const importNode = template.ast('import {readFile} from "fs/promises"');
programScope.path.node.body.unshift(importNode);
return path;
}
});
这是它的样子putout editor
:
于 2021-08-11T13:01:54.490 回答