2

我想编写几个脚本来自动检测丢失的导入并根据根目录导入它们。将此脚本编写为 codemod 脚本还是带有 fix 选项的 eslint 规则更好?

4

2 回答 2

1

Codemods 用于迁移,而 linting 则永久存在,以提醒/警告您的开发人员他们在开发过程中可能犯的一些错误。两者可以一起使用。

对于您的情况,我认为您可以采取两种方法:

  1. 编写检测问题的 lint 规则和修复现有问题的 codemod。lint 规则确保开发人员将来不会错过这一点。

  2. 编写检测问题的 lint 规则以及--fix自动修复问题的选项。

我倾向于方法二,因为它更具前瞻性。您可能只想直接使用此no-unresolvedESLint 规则,而不是编写自己的规则。在任何情况下,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 回答