Skip to content
← Back to rules

import/named Nursery

它的作用

验证所有命名导入是否属于被引用模块中命名导出的集合。

对于 export,验证所有命名导出是否存在于被引用的模块中。

注意:对于包而言,插件将从 jsnext:main(已弃用)或 module 中查找导出名称,如果 package.json 中存在这些字段。例如,Redux 的 npm 模块包含此键,因此可被检查。

当导入的模块路径被忽略或不能明确识别为 ES 模块时,不会报告该问题。请注意,像 Flow 使用的类型导入和导出始终会被忽略。

为什么这是不好的?

导入或导出在被引用模块中不存在的名称可能导致运行时错误和混淆。这可能暗示某些功能可用,但实际上并不存在,使代码更难以维护和理解。此规则有助于确保您的代码准确反映可用的导出内容,从而提高可靠性。

示例

给定

js
// ./foo.js
export const foo = "I'm so foo";

此规则的错误示例:

js
// ./baz.js
import { notFoo } from "./foo";

// 重新导出
export { notFoo as defNotBar } from "./foo";

// 若可用,则会遵循 'jsnext:main'
import { dontCreateStore } from "redux";

此规则的正确示例:

js
// ./bar.js
import { foo } from "./foo";

// 重新导出
export { foo as bar } from "./foo";

// node_modules 中没有 jsnext:main 的默认情况下不进行分析
// (import/ignore 设置)
import { SomeNonsenseThatDoesntExist } from "react";

如何使用

要通过配置文件或 CLI 启用此规则,可以使用:

json
{
  "plugins": ["import"],
  "rules": {
    "import/named": "error"
  }
}
bash
oxlint --deny import/named --import-plugin

参考资料