npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@watcha-authentic/eslint-config

v2.0.3

Published

Watcha 공통 ESLint(flat config) 설정

Downloads

3,029

Readme

@watcha-authentic/eslint-config

npm version

Watcha 공통 ESLint(flat config) 설정입니다. 환경별 preset과, 직접 조합할 수 있는 config block을 subpath로 제공합니다.

릴리즈: CHANGELOG · GitHub Releases

Table of contents

Subpath exports

v2부터 루트(.) import는 없습니다. 아래 preset 또는 config subpath를 import하세요.

Presets (recommended)

| subpath | export | 구성 | | ------- | ------ | ---- | | @watcha-authentic/eslint-config/node | nodePreset | base + typescript | | @watcha-authentic/eslint-config/react | reactPreset | base + typescript + react | | @watcha-authentic/eslint-config/vite | vitePreset | base + typescript + react + vite | | @watcha-authentic/eslint-config/next | nextPreset | base + typescript + react + next | | @watcha-authentic/eslint-config/remix | remixPreset | base + typescript + react + remix | | @watcha-authentic/eslint-config/rsbuild | rsbuildPreset | base + typescript + react + rsbuild |

Config blocks (custom composition)

| subpath | export | | ------- | ------ | | @watcha-authentic/eslint-config/configs/base | baseConfigs | | @watcha-authentic/eslint-config/configs/typescript | typescriptConfigs | | @watcha-authentic/eslint-config/configs/react | reactConfigs | | @watcha-authentic/eslint-config/configs/vite | viteConfigs | | @watcha-authentic/eslint-config/configs/next | nextConfigs | | @watcha-authentic/eslint-config/configs/remix | remixConfigs | | @watcha-authentic/eslint-config/configs/rsbuild | rsbuildConfigs |

Installation

사용할 preset 또는 config block을 Subpath exports에서 고른 뒤, 아래 프리셋별 종속성 가이드 또는 config block별 종속성 가이드의 설치 명령을 복사해 실행하세요.

각 명령에는 @watcha-authentic/eslint-config와 필요한 peer가 모두 들어 있습니다.

Peer dependencies

런타임 의존성은 없습니다. ESLint 플러그인·파서는 프로젝트에 직접 설치합니다.

npm은 subpath마다 peer를 나눠 선언할 수 없어, package.json의 peer는 모두 optional입니다. 쓰는 subpath에 맞는 패키지만 설치하면 됩니다.

공통 (모든 preset / config)

| 패키지 | | ------ | | eslint | | eslint-plugin-import | | eslint-plugin-perfectionist | | eslint-plugin-simple-import-sort | | eslint-import-resolver-typescript |

프리셋별 종속성 가이드

preset subpath는 그 preset에 들어 있는 config peer를 모두 필요로 합니다. 아래 명령을 복사해 한 번에 설치하세요.

| preset | subpath | 구성 | | ------ | ------- | ---- | | nodePreset | /node | base + typescript | | reactPreset | /react | base + typescript + react | | vitePreset | /vite | base + typescript + react + vite | | nextPreset | /next | base + typescript + react + next | | remixPreset | /remix | base + typescript + react + remix | | rsbuildPreset | /rsbuild | base + typescript + react + rsbuild |

/nodenodePreset

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0

/reactreactPreset

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0 \
  eslint-plugin-react@^7.0.0 \
  eslint-plugin-react-hooks@^7.0.0

/vitevitePreset

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0 \
  eslint-plugin-react@^7.0.0 \
  eslint-plugin-react-hooks@^7.0.0 \
  eslint-plugin-react-refresh@^0.4.0 \
  globals@^17.6.0

/nextnextPreset

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0 \
  eslint-plugin-react@^7.0.0 \
  eslint-plugin-react-hooks@^7.0.0 \
  @next/eslint-plugin-next@^15.0.0

/remixremixPreset

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0 \
  eslint-plugin-react@^7.0.0 \
  eslint-plugin-react-hooks@^7.0.0 \
  eslint-plugin-react-refresh@^0.4.0

/rsbuildrsbuildPreset

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0 \
  eslint-plugin-react@^7.0.0 \
  eslint-plugin-react-hooks@^7.0.0 \
  eslint-plugin-react-refresh@^0.4.0 \
  globals@^17.6.0

config block별 종속성 가이드

config block은 preset처럼 여러 개를 이어 붙여 씁니다. import하는 block에 맞는 peer를 모두 설치하세요.

아래 명령은 block을 권장 순서대로 누적했을 때(basetypescriptreact → 환경별 block) 필요한 peer 전체입니다.

| export | subpath | 누적 구성 | | ------ | ------- | --------- | | baseConfigs | /configs/base | base | | typescriptConfigs | /configs/typescript | base + typescript | | reactConfigs | /configs/react | base + typescript + react | | viteConfigs | /configs/vite | base + typescript + react + vite | | nextConfigs | /configs/next | base + typescript + react + next | | remixConfigs | /configs/remix | base + typescript + react + remix | | rsbuildConfigs | /configs/rsbuild | base + typescript + react + rsbuild |

/configs/basebaseConfigs

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0

/configs/typescripttypescriptConfigs

baseConfigs + typescriptConfigs 조합 기준

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0

/configs/reactreactConfigs

baseConfigs + typescriptConfigs + reactConfigs 조합 기준

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0 \
  eslint-plugin-react@^7.0.0 \
  eslint-plugin-react-hooks@^7.0.0

/configs/viteviteConfigs

baseConfigs + typescriptConfigs + reactConfigs + viteConfigs 조합 기준

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0 \
  eslint-plugin-react@^7.0.0 \
  eslint-plugin-react-hooks@^7.0.0 \
  eslint-plugin-react-refresh@^0.4.0 \
  globals@^17.6.0

/configs/nextnextConfigs

baseConfigs + typescriptConfigs + reactConfigs + nextConfigs 조합 기준

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0 \
  eslint-plugin-react@^7.0.0 \
  eslint-plugin-react-hooks@^7.0.0 \
  @next/eslint-plugin-next@^15.0.0

/configs/remixremixConfigs

baseConfigs + typescriptConfigs + reactConfigs + remixConfigs 조합 기준

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0 \
  eslint-plugin-react@^7.0.0 \
  eslint-plugin-react-hooks@^7.0.0 \
  eslint-plugin-react-refresh@^0.4.0

/configs/rsbuildrsbuildConfigs

baseConfigs + typescriptConfigs + reactConfigs + rsbuildConfigs 조합 기준

pnpm add -D @watcha-authentic/eslint-config@^2.0.0 \
  eslint@^9.0.0 \
  eslint-plugin-import@^2.0.0 \
  eslint-plugin-perfectionist@^5.0.0 \
  eslint-plugin-simple-import-sort@^12.0.0 \
  eslint-import-resolver-typescript@^3.6.0 \
  @typescript-eslint/parser@^8.0.0 \
  @typescript-eslint/eslint-plugin@^8.0.0 \
  eslint-plugin-react@^7.0.0 \
  eslint-plugin-react-hooks@^7.0.0 \
  eslint-plugin-react-refresh@^0.4.0 \
  globals@^17.6.0

Usage

Flat config는 배열을 펼쳐서 내보냅니다.

Preset

// eslint.config.js
import { vitePreset } from "@watcha-authentic/eslint-config/vite";

export default [...vitePreset];

Config blocks

// eslint.config.js
import { baseConfigs } from "@watcha-authentic/eslint-config/configs/base";
import { typescriptConfigs } from "@watcha-authentic/eslint-config/configs/typescript";

export default [...baseConfigs, ...typescriptConfigs];

Extending a preset

// eslint.config.js
import { reactPreset } from "@watcha-authentic/eslint-config/react";

export default [
  ...reactPreset,
  {
    rules: {
      "no-console": "off",
    },
  },
];

CommonJS

// eslint.config.cjs
const { vitePreset } = require("@watcha-authentic/eslint-config/vite");

module.exports = [...vitePreset];

Migration from v1

| v1 | v2 | | -- | -- | | import { vitePreset } from "@watcha-authentic/eslint-config" | import { vitePreset } from "@watcha-authentic/eslint-config/vite" | | import { baseConfigs } from "@watcha-authentic/eslint-config" | import { baseConfigs } from "@watcha-authentic/eslint-config/configs/base" | | import lint from "@watcha-authentic/eslint-config" | subpath import로 바꾸기 (루트 import 없음) |

v2는 2.0.0 major입니다. 사용하는 preset에 맞는 peer만 설치하면 @next/eslint-plugin-next 등 불필요한 플러그인을 설치하지 않아도 됩니다.