菜单

导入规则

相关源文件

目的与范围

本文档详细介绍了Airbnb JavaScript风格指南中用于强制执行一致且可靠的JavaScript导入/导出模式的ESLint规则。这些规则通过 eslint-plugin-import 插件实现,并且是整体代码检查系统的重要组成部分。有关JavaScript最佳实践的通用信息,请参阅 最佳实践规则,有关ES6特性的信息,请参阅 ES6规则

配置概述

导入规则系统配置在 eslint-config-airbnb-base 软件包中,并带有特定的解析器设置,以正确处理ES6模块语法。

来源: packages/eslint-config-airbnb-base/rules/imports.js1-30

规则类别

导入规则被组织成逻辑类别,以处理模块导入和导出的不同方面。

静态分析规则

这些规则执行静态代码分析,以确保导入可以解析并正确定义。

规则严重性描述
import/no-unresolved错误确保导入指向可解析的文件/模块
import/named错误确保命名导入对应于命名导出
import/default关闭验证默认导入与默认导出
import/namespace关闭确保命名空间导入有效

来源: packages/eslint-config-airbnb-base/rules/imports.js32-48

警告和错误预防

这些规则有助于识别可能导致错误的导入模式。

规则严重性描述
import/export错误禁止无效的导出,例如多个默认导出
import/no-named-as-default错误防止默认导入名称与命名导出匹配
import/no-named-as-default-member错误访问命名导出成员时发出警告
import/no-deprecated关闭导入已弃用的模块时发出警告
import/no-extraneous-dependencies错误禁止导入package.json中未列出的包
import/no-mutable-exports错误防止导出可变变量

来源: packages/eslint-config-airbnb-base/rules/imports.js50-101

模块系统规则

这些规则定义了允许使用哪些模块系统以及如何使用它们。

规则严重性描述
import/no-commonjs关闭禁止使用CommonJS require() 语法
import/no-amd错误禁止使用AMD require/define 语法
import/no-nodejs-modules关闭禁止使用Node.js内置模块

来源: packages/eslint-config-airbnb-base/rules/imports.js103-116

风格指南规则

这些规则强制执行导入的风格和组织一致性。

规则严重性描述
import/first错误要求导入出现在文件顶部
import/no-duplicates错误防止重复导入
import/extensions错误控制导入路径中的文件扩展名使用
import/order错误强制导入顺序(内置 → 外部 → 内部)
import/newline-after-import错误要求导入后有换行符
import/prefer-default-export错误对于只有一个导出的模块,倾向于使用默认导出

来源: packages/eslint-config-airbnb-base/rules/imports.js118-157

高级规则

这些规则处理更复杂的场景,如循环依赖和路径优化。

规则严重性描述
import/no-self-import错误防止模块导入自身
import/no-cycle错误防止模块之间的循环依赖
import/no-useless-path-segments错误防止使用不必要的路径段
import/no-relative-packages错误防止通过相对路径导入包

来源: packages/eslint-config-airbnb-base/rules/imports.js232-271

导入规则关系

来源: packages/eslint-config-airbnb-base/rules/imports.js32-281

规则严重性分布

来源: packages/eslint-config-airbnb-base/rules/imports.js32-281

关键导入规则详解

静态分析规则

静态分析规则确保导入可以解析并对应导入模块中的实际导出。

  • import/no-unresolved: 验证所有导入的模块都可以解析为文件或包。
  • import/named: 确保命名导入与导入模块中的命名导出匹配。

来源: packages/eslint-config-airbnb-base/rules/imports.js35-41

依赖规则

依赖规则管理如何导入外部包。

  • import/no-extraneous-dependencies: 确保导入的包已在package.json中声明。
    • 允许在测试文件、配置文件和构建脚本中使用开发依赖项。
    • 已配置针对测试文件和常用构建工具配置的详细模式。

来源: packages/eslint-config-airbnb-base/rules/imports.js68-97

路径管理

几条规则确保导入使用正确的路径格式。

  • import/extensions: 控制导入路径中的文件扩展名使用。
    • 配置为从不要求.js、.mjs 和 .jsx 文件的扩展名。
  • import/no-absolute-path: 防止在导入中使用绝对路径。
  • import/no-useless-path-segments: 消除不必要的路径段。

来源: packages/eslint-config-airbnb-base/rules/imports.js138-144 packages/eslint-config-airbnb-base/rules/imports.js168-169 packages/eslint-config-airbnb-base/rules/imports.js239-241

导入顺序

import/order 规则强制执行导入的顺序。

  • 内置模块(如 'fs','path')
  • 外部包(来自 node_modules)
  • 内部模块(本地导入)

来源: packages/eslint-config-airbnb-base/rules/imports.js146-149

循环依赖

防止循环依赖的规则。

  • import/no-self-import: 防止模块导入自身。
  • import/no-cycle: 检测并防止模块间的循环依赖。

来源: packages/eslint-config-airbnb-base/rules/imports.js232-237

导入模块解析架构

来源: packages/eslint-config-airbnb-base/rules/imports.js13-30