Eslint 规则/Vscode 设置以防止导入没有索引的文件夹

问题描述 投票:0回答:1

问题:

是否有 ESLint 规则强制在导入时使用

*/index

示例:

文件结构:

utils/
   - index.js
   - a.js
   - b.js

main.js

main.js

// WRONG
import utils from "./utils";

// OK 
import utils from "./utils/index";

为什么

我需要这个,因为我的项目正在使用

tscpaths
在打字稿编译后用相对路径替换绝对路径,但是,由于某种原因,当
*/index
不存在时,它不会替换。

替代方案

如果规则不存在,是否有 vscode 设置可以自动在自动导入中添加

index

javascript typescript visual-studio-code eslint tsc
1个回答
2
投票

选项 1,重组您的项目,这样就没有

index.js
需要导入。它被称为
index
的历史原因是包含该文件夹内容的索引,将通常导出的内容收集在一个整洁的包中,这样人们就不必查看文件夹中的详细信息。如果这不是您需要的 只是不要将其称为
index
您可能只需将它们全部重命名为
main.js
,批量查找替换导入,并且将来从 IDE 中自动导入即可工作。

选项 2,如果没有太多文件夹出现此问题,您可以为

no-internal-imports
规则编写配置,以便按名称导入文件夹被视为“内部引用”。这可能是最糟糕的解决方案,因为没有自动修复并且添加新文件夹需要更新 eslint 配置,但这可能会有所帮助,作为一个选项提及

选项3,创建执行此操作的

no-useless-path-segments
规则的修改版本,它目前具有与您想要的相反的逻辑,因此您可以修改第95-108行周围的代码以检查导入是否不是索引导入但解析为建议修复:

// assuming your rule has an option called enforceIndex
if (options && options.enforceIndex && !regexUnnecessaryIndex.test(importPath)) {
    // if the import path is not pointing to an index file check if it resolves to a path that looks like an index file
    const resolved_path = resolve(importPath, context);
    if(regexUnnecessaryIndex.test(resolved_path)){
        // if the resolved_path resolves to something that looks like an index then suggest adding /index
        return reportWithProposedPath(`${importPath}/index`);
    }
}

但是事实上,有一个 eslint 规则强加了你想要的完全相反的逻辑应该是一个很好的指标,表明你所要求的并不完全被认为是好的形式。

© www.soinside.com 2019 - 2024. All rights reserved.