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
기본값: 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