import/no-namespace 风格
它的作用
强制执行不使用命名空间(也称为“通配符” *)导入的约定。
为什么这是不好的?
尽管有时会使用命名空间导入,但在现代 JavaScript 开发中,它们通常被认为不够理想,原因如下:
- 精确性与命名空间污染:
- 精确性:命名空间导入会导入整个模块,包含所有内容,即使你只需求其中少数几个函数或类。如果不同模块中存在同名的不同函数,这可能导致潜在的命名冲突。
- 污染:导入整个命名空间会将可能不必要的函数和变量引入当前作用域。这增加了意外使用非预期函数或变量的可能性,从而导致更难调试的错误。
- 可维护性:
- 清晰性:命名空间导入会使代码中具体使用了哪些函数或类变得难以理解。在具有大量导入的大项目中尤其如此。
- 重构:如果被导入模块中的某个函数或类名称发生变化,而你使用了命名空间导入,则可能需要更新代码中的多个部分。当涉及多个命名空间时,这一问题会变得更加棘手。
- 现代实践:
- 显式导入:现代 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