该插件旨在支持对ES2015+(ES6+)import/export语法的检查,并防止文件路径和导入名称拼写错误的问题。ES2015+静态模块语法提供的所有优点,都可以在您的编辑器中得到体现。
eslint-plugin-i
现已更名为eslint-plugin-import-x
如果您正在Sublime中使用本插件:请查看底部章节获取重要信息。
💼 在配置中启用。
⚠️ 在配置中设置为警告。
🚫 在配置中禁用。
❗ 在errors
配置中设置。
☑️ 在recommended
配置中设置。
⌨️ 在typescript
配置中设置。
🚸 在warnings
配置中设置。
🔧 可通过--fix
CLI选项自动修复。
💡 可通过编辑器建议手动修复。
❌ 已废弃。
名称 | 描述 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ |
---|---|---|---|---|---|---|---|
export | 禁止任何无效的导出,即重复导出相同的名称。 | ❗ ☑️ | |||||
no-deprecated | 禁止导入带有@deprecated 文档标签的名称。 | ||||||
no-empty-named-blocks | 禁止空的命名导入块。 | 🔧 | 💡 | ||||
no-extraneous-dependencies | 禁止使用无关的包。 | ||||||
no-mutable-exports | 禁止使用var 或let 进行可变导出。 | ||||||
no-named-as-default | 禁止将导出的名称用作默认导出的标识符。 | ☑️ 🚸 | |||||
no-named-as-default-member | 禁止将导出的名称用作默认导出的属性。 | ☑️ 🚸 | |||||
no-unused-modules | 禁止没有导出的模块,或者导出但在其他模块中未被导入。 |
名称 | 描述 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ |
---|---|---|---|---|---|---|---|
no-amd | 禁止使用 AMD 的 require 和 define 调用。 | ||||||
no-commonjs | 禁止使用 CommonJS 的 require 调用和 module.exports 或 exports.* 。 | ||||||
no-import-module-exports | 禁止在使用 CommonJS 的 module.exports 时使用 import 语句。 | 🔧 | |||||
no-nodejs-modules | 禁止使用 Node.js 内置模块。 | ||||||
unambiguous | 禁止可能产生歧义的解析目标(script 与 module )。 |
名称 | 描述 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ |
---|---|---|---|---|---|---|---|
default | 确保在有默认导入的情况下存在默认导出。 | ❗ ☑️ | |||||
named | 确保命名导入与远程文件中的命名导出相对应。 | ❗ ☑️ | ⌨️ | ||||
namespace | 确保导入的命名空间在解引用时包含已解引用的属性。 | ❗ ☑️ | |||||
no-absolute-path | 禁止使用绝对路径导入模块。 | 🔧 | |||||
no-cycle | 禁止模块导入具有依赖路径回到自身的模块。 | ||||||
no-dynamic-require | 禁止使用表达式调用 require() 。 | ||||||
no-internal-modules | 禁止导入其他模块的子模块。 | ||||||
no-relative-packages | 禁止通过相对路径导入包。 | 🔧 | |||||
no-relative-parent-imports | 禁止从父目录导入模块。 | ||||||
no-restricted-paths | 限制在给定文件夹中可以导入的文件。 | ||||||
no-self-import | 禁止模块导入自身。 | ||||||
no-unresolved | 确保导入指向可解析的文件/模块。 | ❗ ☑️ | |||||
no-useless-path-segments | 禁止在导入和 require 语句中使用不必要的路径段。 | 🔧 | |||||
no-webpack-loader-syntax | 禁止在导入中使用 webpack 加载器语法。 |
名称 | 描述 | 💼 | ⚠️ | 🚫 | 🔧 | 💡 | ❌ |
---|---|---|---|---|---|---|---|
consistent-type-specifier-style | 强制或禁止在命名导入中使用内联类型标记。 | 🔧 | |||||
dynamic-import-chunkname | 对动态导入强制使用带有 webpackChunkName 的前置注释。 | 💡 | |||||
exports-last | 确保所有导出出现在其他语句之后。 | ||||||
extensions | 确保在导入路径中一致使用文件扩展名。 | ||||||
first | 确保所有导入出现在其他语句之前。 | 🔧 | |||||
group-exports | 倾向于将命名导出分组到单个导出声明中。 | ||||||
imports-first | 已被 import-x/first 替代。 | 🔧 | ❌ | ||||
max-dependencies | 限制模块可以有的最大依赖数量。 | ||||||
newline-after-import | 在导入语句后强制添加换行。 | 🔧 | |||||
no-anonymous-default-export | 禁止匿名值作为默认导出。 | ||||||
no-default-export | 禁止默认导出。 | ||||||
no-duplicates | 禁止在多个地方重复导入同一模块。 | ☑️ 🚸 | 🔧 | ||||
no-named-default | 禁止命名的默认导出。 | ||||||
no-named-export | 禁止命名导出。 | ||||||
no-namespace | 禁止命名空间(又称"通配符" * )导入。 | 🔧 | |||||
no-unassigned-import | 禁止未分配的导入。 | ||||||
order | 强制模块导入顺序的约定。 | 🔧 | |||||
prefer-default-export | 如果模块导出单个名称或多个名称,倾向于使用默认导出。 |
# 在项目的工作树内 npm install eslint-plugin-import-x --save-dev
所有规则默认都是关闭的。但是,您可以在 .eslintrc.(yml|json|js)
中手动配置它们,或扩展预设配置:
--- extends: - eslint:recommended - plugin:import-x/recommended # 或者,'recommended' 是以下两个规则集的组合: - plugin:import-x/errors - plugin:import-x/warnings # 或手动配置: plugins: - import-x rules: import-x/no-unresolved: [2, { commonjs: true, amd: true }] import-x/named: 2 import-x/namespace: 2 import-x/default: 2 import-x/export: 2 # 等等...
您可以使用以下代码片段,或使用下面描述的精细设置自行组装配置。
确保您已安装 [@typescript-eslint/parser
] 和 [eslint-import-resolver-typescript
],它们在以下配置中使用。
extends: - eslint:recommended - plugin:import-x/recommended # 以下几行是关键 - plugin:import-x/typescript settings: import-x/resolver: # 您还需要安装和配置 TypeScript 解析器 # 另请参阅 https://github.com/import-js/eslint-import-resolver-typescript#configuration typescript: true node: true
随着模块打包工具的出现以及模块和模块语法规范的当前状态,import x from 'module'
应该在哪里查找 module
背后的文件并不总是显而易见的。
直到 v0.10 左右,这个插件直接使用 substack 的 resolve
插件,它实现了 Node 的导入行为。在大多数情况下,这种方法效果很好。
然而,webpack 允许在导入模块源字符串中使用 Node 不允许的一些内容,比如加载器(import 'file!./whatever'
)和一些别名方案,如 externals