Skip to content
← Back to rules

import/no-cycle 制限

何をするか

このルールは、依存関係経由でこのモジュールに戻る解決可能なパスが存在しないことを確認します。

maxDepth オプションが設定されていない場合、深さ1(インポートされたモジュールが自分自身をインポート)から実質的に無限の深さまで、サイクルを検出します。

なぜ問題なのか

依存関係のサイクルは、バグの原因が見つけにくくなる複雑なアーキテクチャを生み出します。サイクルによって引き起こされる 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.jsdep-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

チェーンに少なくとも1つの動的インポートがある場合、循環依存を許可する

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

参照