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.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
チェーンに少なくとも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