Skip to content
← Back to rules

import/no-namespace 风格

An auto-fix is available for this rule.

它的作用

强制执行不使用命名空间(也称为“通配符” *)导入的约定。

为什么这是不好的?

尽管有时会使用命名空间导入,但在现代 JavaScript 开发中,它们通常被认为不够理想,原因如下:

  1. 精确性与命名空间污染
  • 精确性:命名空间导入会导入整个模块,包含所有内容,即使你只需求其中少数几个函数或类。如果不同模块中存在同名的不同函数,这可能导致潜在的命名冲突。
  • 污染:导入整个命名空间会将可能不必要的函数和变量引入当前作用域。这增加了意外使用非预期函数或变量的可能性,从而导致更难调试的错误。
  1. 可维护性
  • 清晰性:命名空间导入会使代码中具体使用了哪些函数或类变得难以理解。在具有大量导入的大项目中尤其如此。
  • 重构:如果被导入模块中的某个函数或类名称发生变化,而你使用了命名空间导入,则可能需要更新代码中的多个部分。当涉及多个命名空间时,这一问题会变得更加棘手。
  1. 现代实践
  • 显式导入:现代 JavaScript 实践鼓励对特定组件进行显式导入。这有助于提升代码的可读性和可维护性。
  • 树摇(Tree-Shaking):Webpack 和 Rollup 等工具使用树摇来从你的打包文件中移除未使用的代码。命名空间导入可能会阻碍高效的树摇,导致打包体积增大。

示例

此规则的错误代码示例:

js
import * as user from "user-lib";

import some, * as user from "./user";

此规则的正确代码示例:

js
import { getUserName, isUser } from "user-lib";

import user from "user-lib";
import defaultExport, { isUser } from "./user";

配置

该规则接受一个配置对象,包含以下属性:

ignore

type: string[]

default: []

一个用于指定应被规则忽略的模块的 glob 字符串数组。 例如,["*.json"] 将忽略所有 JSON 导入。

如何使用

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

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

参考资料