Skip to content
← Back to rules

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.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

기본값: false

체인에 하나 이상의 동적 수입이 있으면 순환 의존을 허용

ignoreExternal

type: boolean

기본값: false

외부 모듈 무시

ignoreTypes

type: boolean

기본값: true

타입 전용 수입 무시

maxDepth

type: integer

기본값: 4294967295

탐색할 수 있는 최대 의존성 깊이

사용 방법

이 규칙을 구성 파일 또는 명령줄 인터페이스에서 활성화하려면 다음을 사용할 수 있습니다:

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

참고자료