import/no-cycle 限制
它的作用
确保通过依赖项无法回溯到此模块的可解析路径。
这包括深度为 1 的循环(被导入的模块又导入了我)到一个实际上无限的值,如果未设置 maxDepth 选项,则可能达到无限深度。
为什么这是不好的?
依赖循环会导致架构混乱,使错误难以定位。常见的情况是导入了一个由于循环依赖导致的 undefined 值。
示例
此规则的错误代码示例:
javascript
// dep-b.js
import "./dep-a.js";
export function b() {
/* ... */
}javascript
// dep-a.js
import { b } from "./dep-b.js"; // 报告:检测到依赖循环。
export function a() {
/* ... */
}在此示例中,dep-a.js 和 dep-b.js 相互导入,形成了循环依赖,这是有问题的。
此规则的正确代码示例:
javascript
// dep-b.js
export function b() {
/* ... */
}javascript
// dep-a.js
import { b } from "./dep-b.js"; // 无循环依赖
export function a() {
/* ... */
}在此修正版本中,dep-b.js 不再导入 dep-a.js,从而打破了循环。
配置
此规则接受一个配置对象,包含以下属性:
allowUnsafeDynamicCyclicDependency
type: boolean
default: false
如果链中至少有一个动态导入,则允许循环依赖
ignoreExternal
type: boolean
default: false
忽略外部模块
ignoreTypes
type: boolean
default: true
忽略仅用于类型的导入
maxDepth
type: integer
default: 4294967295
要遍历的最大依赖深度
如何使用
要通过配置文件或 CLI 启用此规则,可以使用:
json
{
"plugins": ["import"],
"rules": {
"import/no-cycle": "error"
}
}bash
oxlint --deny import/no-cycle --import-plugin