本文档详细介绍了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: 控制导入路径中的文件扩展名使用。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 规则强制执行导入的顺序。
来源: 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