Skip to content

구성

Oxlint은 기본적으로 작동하지만, 대부분의 팀은 로컬 실행, 에디터 및 CI에서 린트를 일관되게 유지하기 위해 구성 파일(.oxlintrc.json 또는 oxlint.config.ts)을 커밋합니다.

이 페이지는 규칙, 카테고리, 플러그인, 오버라이드 및 공유 설정을 포함한 프로젝트 구성에 집중합니다.

구성 파일 생성

현재 디렉터리에 시작용 구성 파일(기본값: JSON)을 생성하려면:

sh
oxlint --init

Oxlint은 현재 작업 디렉터리에서 .oxlintrc.json 또는 oxlint.config.ts를 자동으로 탐색합니다. 또한 명시적으로 구성 파일을 전달할 수도 있습니다 (이 경우 중첩된 구성 검색이 비활성화됨):

sh
oxlint -c ./oxlintrc.json
# 또는
oxlint --config ./oxlintrc.json

참고 사항:

  • .oxlintrc.json은 주석을 지원합니다 (jsonc 형식과 유사).
  • 구성 형식은 ESLint v8의 형식(eslintrc.json)과 호환되도록 설계되었습니다.
  • 디렉터리 내에서 .oxlintrc.json 또는 oxlint.config.ts 중 하나만 사용할 수 있으며, 두 개 모두 사용하면 안 됩니다.

최소한의 구성은 다음과 같습니다:

.oxlintrc.json
json
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "categories": {
    "correctness": "warn"
  },
  "rules": {
    "eslint/no-unused-vars": "error"
  }
}

TypeScript 구성 파일 (oxlint.config.ts)

Oxlint은 oxlint.config.ts라는 이름의 TypeScript 구성 파일도 지원합니다.

oxlint.config.ts
ts
import { defineConfig } from "oxlint";

export default defineConfig({
  categories: {
    correctness: "warn",
  },
  rules: {
    "eslint/no-unused-vars": "error",
  },
});

참고 사항:

  • 파일 이름은 oxlint.config.ts여야 합니다 (모든 경우에 --config를 통해 전달될 때도 마찬가지).
  • 기본 내보내기는 객체여야 하며, 타입을 위해 defineConfig로 감싸야 합니다.
  • TypeScript 구성 파일은 노드 기반의 oxlint 패키지(자바스크립트 런타임)를 필요로 합니다. 단독 바이너리를 사용하는 경우, 대신 .oxlintrc.json을 사용하세요.
  • TypeScript 구성 파일은 타입스크립트를 실행할 수 있는 노드 런타임이 필요합니다.

구성 파일 형식

구성 파일은 다음 중 하나입니다:

  • JSON 객체 (.oxlintrc.json)
  • 기본 내보내기가 구성 객체인 타입스크립트 모듈 (oxlint.config.ts)

가장 일반적인 최상위 필드는 다음과 같습니다:

  • rules: 규칙을 활성화하거나 비활성화하고, 심각도를 설정하며, 규칙 옵션을 구성합니다.
  • categories: 유사한 목적을 가진 규칙 그룹을 활성화하거나 비활성화합니다.
  • plugins: 추가 규칙을 제공하는 내장 플러그인을 활성화합니다.
  • jsPlugins: JavaScript 플러그인을 구성합니다 (실험적).
  • overrides: 다양한 파일 패턴에 대해 다른 구성 적용.
  • extends: 다른 파일로부터 구성 상속.
  • ignorePatterns: 구성 파일에서 추가적으로 무시할 파일 지정.
  • env: 일반 환경(예: 브라우저, 노드 등)에 대한 사전 정의된 글로벌 변수 활성화.
  • globals: 사용자 정의 글로벌 변수를 읽기 전용 또는 쓰기 가능으로 선언.
  • settings: 여러 규칙이 공유하는 플러그인 전체 구성.

모든 필드 목록은 구성 파일 참조를 참조하세요.

규칙 구성

규칙은 rules 아래에서 구성됩니다.

규칙 값은 다음 중 하나입니다:

  • 심각도 ("off", "warn", "error"), 또는
  • [심각도, 옵션] 형태의 배열

규칙 이름이 고유하다면 플러그인 접두사 없이 구성할 수 있습니다. 예: no-consoleeslint/no-console와 동일합니다.

.oxlintrc.json
json
{
  "rules": {
    "no-alert": "error",
    "oxc/approx-constant": "warn",
    "no-plusplus": "off"
  }
}

심각도 값

Oxlint은 ESLint 스타일의 심각도를 수용합니다:

  • 규칙 허용: "off", "allow"
  • 규칙 경고: "warn"
  • 규칙 오류: "error", "deny"

규칙 옵션

규칙 옵션을 구성하려면 배열을 사용합니다:

.oxlintrc.json
json
{
  "rules": {
    "no-plusplus": ["error", { "allowForLoopAfterthoughts": true }]
  }
}

사용 가능한 모든 규칙 및 구성 옵션은 규칙 참조에서 확인할 수 있습니다.

명령줄에서 심각도 오버라이드

빠른 실험을 위해 다음 옵션을 사용하여 명령줄에서 심각도를 조정할 수 있습니다:

  • -A / --allow
  • -W / --warn
  • -D / --deny

옵션은 왼쪽에서 오른쪽 순서로 적용됩니다:

sh
oxlint -D no-alert -W oxc/approx-constant -A no-plusplus

카테고리로 규칙 그룹 활성화

카테고리는 유사한 의도를 가진 규칙 집합을 활성화하거나 비활성화할 수 있게 해줍니다. 기본적으로 Oxlint은 correctness 카테고리의 규칙을 활성화합니다.

categories를 사용해 카테고리를 구성합니다:

.oxlintrc.json
json
{
  "categories": {
    "correctness": "error",
    "suspicious": "warn",
    "pedantic": "off"
  }
}

사용 가능한 카테고리는 다음과 같습니다:

  • correctness: 분명히 잘못되거나 의미 없는 코드
  • suspicious: 잘못되거나 의미 없을 가능성이 높은 코드
  • pedantic: 거짓 긍정이 발생할 수 있는 과도하게 엄격한 규칙
  • perf: 런타임 성능 향상을 목표로 하는 규칙
  • style: 자연스럽고 일관된 스타일 규칙
  • restriction: 특정 패턴이나 기능을 금지하는 규칙
  • nursery: 개발 중이며 변경될 수 있는 규칙

클라이언트 명령줄에서도 동일한 -A, -W, -D 옵션을 사용하여 카테고리를 변경할 수 있습니다:

sh
oxlint -D correctness -D suspicious

플러그인 구성

플러그인은 사용 가능한 규칙 세트를 확장합니다.

Oxlint은 루스트 언어로 많은 인기 있는 플러그인을 네이티브로 지원합니다. 이는 큰 자바스크립트 종속성 트리 없이 광범위한 규칙 커버리지를 제공합니다. 네이티브 플러그인 참조.

plugins를 사용하여 플러그인을 구성합니다. plugins 설정은 기본 플러그인 세트를 덮어쓰므로, 활성화하고자 하는 모든 항목을 포함해야 합니다:

.oxlintrc.json
json
{
  "plugins": ["unicorn", "typescript", "oxc"]
}

모든 기본 플러그인을 비활성화하려면:

.oxlintrc.json
json
{
  "plugins": []
}

플러그인 세부 정보 및 --import-plugin과 같은 명령줄 플래그에 대해서는 네이티브 플러그인을 참조하세요.

자바스크립트 플러그인 구성 (실험적)

Oxlint은 jsPlugins를 통해 자바스크립트 플러그인도 지원합니다. 이는 기존 ESLint 플러그인과의 호환성 및 고급 통합을 위한 것입니다.

참고 사항:

  • 자바스크립트 플러그인은 실험적이고, semver 규칙의 적용 대상이 아닙니다.

자바스크립트 플러그인은 문자열로 선언하거나 별칭이 있는 객체로 선언할 수 있습니다:

.oxlintrc.json
json
{
  "jsPlugins": [
    "eslint-plugin-playwright",
    { "name": "my-eslint-react", "specifier": "eslint-plugin-react" }
  ]
}

일부 플러그인 이름은 루스트로 내장 구현되어 있기 때문에 예약되어 있습니다 (예: react, unicorn, typescript, oxc, import, jest, vitest, jsx-a11y, nextjs). 예약된 플러그인의 자바스크립트 버전이 필요한 경우 충돌을 피하기 위해 사용자 정의 name을 제공하세요.

세부 내용은 자바스크립트 플러그인을 참조하세요.

파일 패턴별 구성 적용

overrides를 사용하여 테스트, 스크립트 또는 타입스크립트 전용 경로와 같이 다양한 파일에 대해 다른 구성 적용.

overrides는 객체 배열입니다. 각 오버라이드는 다음을 포함할 수 있습니다:

  • files: 글로브 패턴
  • rules: 규칙 구성 (최상위 rules와 동일한 구조)
  • env: 환경 구성 (최상위 env와 동일한 구조)
  • globals: 글로벌 구성 (최상위 globals와 동일한 구조)
  • plugins: 해당 오버라이드에 대해 활성화할 플러그인을 선택적으로 변경
  • jsPlugins: 해당 오버라이드용 자바스크립트 플러그인 (실험적)

예제:

.oxlintrc.json
json
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "rules": {
    "no-console": "error"
  },
  "overrides": [
    {
      "files": ["scripts/*.js"],
      "rules": {
        "no-console": "off"
      }
    },
    {
      "files": ["**/*.{ts,tsx}"],
      "plugins": ["typescript"],
      "rules": {
        "typescript/no-explicit-any": "error"
      }
    },
    {
      "files": ["**/test/**"],
      "plugins": ["jest"],
      "env": {
        "jest": true
      },
      "rules": {
        "jest/no-disabled-tests": "off"
      }
    }
  ]
}

공유 구성 상속

extends를 사용하여 다른 구성 파일로부터 상속받습니다.

extends 내 경로는 extends를 선언한 구성 파일 기준으로 해결됩니다. 구성은 첫 번째부터 마지막까지 병합되며, 나중에 들어오는 항목이 먼저 들어온 항목을 덮어씁니다.

.oxlintrc.json
json
{
  "extends": ["./configs/base.json", "./configs/frontend.json"]
}
oxlint.config.ts
ts
import baseConfig from "./configs/base.ts";
import frontendConfig from "./configs/frontend.ts";
import { defineConfig } from "oxlint";

export default defineConfig({
  extends: [baseConfig, frontendConfig],
});

환경 및 글로벌 변수 구성

env를 사용하여 브라우저나 노드와 같은 일반 환경에 대한 사전 정의된 글로벌 변수를 활성화합니다.

globals를 사용하여 프로젝트 특수 글로벌 변수를 선언하고, 읽기 전용 또는 쓰기 가능으로 표시하거나, 기본적으로 존재하는 글로벌 변수를 비활성화합니다.

.oxlintrc.json
json
{
  "env": {
    "es6": true
  },
  "globals": {
    "MY_GLOBAL": "readonly",
    "Promise": "off"
  }
}

globals는 다음 값을 받습니다:

  • "readonly" 또는 "readable" 또는 false
  • "writable" 또는 "writeable" 또는 true
  • "off"로 글로벌 변수 비활성화

플러그인 설정

다양한 규칙이 공유하는 플러그인 전체 구성은 settings를 사용합니다.

예제 (멀티레포 + 리액트 + jsx-a11y):

.oxlintrc.json
json
{
  "settings": {
    "next": {
      "rootDir": "apps/dashboard/"
    },
    "react": {
      "linkComponents": [{ "name": "Link", "linkAttribute": "to" }]
    },
    "jsx-a11y": {
      "components": {
        "Link": "a",
        "Button": "button"
      }
    }
  }
}

다음 단계