import/no-namespace 스타일
작동 방식
이름공간(또는 "와일드카드" *)를 사용하는 모듈을 불허하는 관행을 강제합니다.
왜 문제가 되나요?
이름공간 가져오기(별칭으로 표현되는 * 포함)는 때때로 사용되지만, 여러 이유로 현대적인 자바스크립트 개발에서는 일반적으로 바람직하지 않다고 간주됩니다:
- 정확성과 이름공간 오염:
- 정확성: 이름공간 가져오기는 전체 모듈을 가져오며, 필요한 일부 함수나 클래스만 사용하더라도 모든 항목을 함께 가져옵니다. 만약 다른 모듈에서 동일한 이름을 가진 다른 함수가 있다면, 이름 충돌 가능성이 생깁니다.
- 오염: 전체 이름공간을 가져오는 것은 현재 범위 내에 필요 없는 함수나 변수들까지 포함시켜 오염시킵니다. 의도하지 않은 함수나 변수를 우연히 사용할 가능성 증가로 디버깅이 더 어려워집니다.
- 유지보수성:
- 명확성: 이름공간 가져오기는 코드 내에서 어떤 특정 함수나 클래스가 사용되고 있는지 파악하기 어렵게 만듭니다. 특히 많은 가져오기 항목이 있는 대규모 프로젝트에서는 더욱 그렇습니다.
- 리팩터링 용이성: 가져온 모듈 내의 함수나 클래스 이름이 변경되면, 이름공간 가져오기를 사용하고 있다면 코드의 여러 부분을 업데이트해야 할 수 있습니다. 여러 이름공간을 다루는 경우 더욱 복잡해집니다.
- 현대적 관행:
- 명시적 가져오기: 현대 자바스크립트 관행에서는 특정 컴포넌트를 명시적으로 가져오는 것이 권장됩니다. 이를 통해 코드의 가독성과 유지보수성이 향상됩니다.
- 트리쉐이킹: 웹팩 및 롤업 같은 도구들은 트리쉐이킹을 통해 번들에서 사용되지 않는 코드를 제거합니다. 이름공간 가져오기는 효율적인 트리쉐이킹을 방해하여 번들 크기가 커질 수 있습니다.
예시
이 규칙에 대해 잘못된 코드 예시:
js
import * as user from "user-lib";
import some, * as user from "./user";이 규칙에 대해 올바른 코드 예시:
js
import { getUserName, isUser } from "user-lib";
import user from "user-lib";
import defaultExport, { isUser } from "./user";구성
이 규칙은 다음 속성을 가진 구성 객체를 수용합니다:
무시
type: string[]
기본값: []
이 규칙에서 무시해야 하는 모듈에 대한 글로브 문자열 배열입니다. 예를 들어 ["*.json"]은 모든 JSON 가져오기를 무시합니다.
사용 방법
이 규칙을 설정 파일이나 명령줄 인터페이스에서 활성화하려면 다음과 같이 사용할 수 있습니다:
json
{
"plugins": ["import"],
"rules": {
"import/no-namespace": "error"
}
}bash
oxlint --deny import/no-namespace --import-plugin