diff --git a/packages/eslint-config/README.md b/packages/eslint-config/README.md index 35f4cfe..10e1384 100644 --- a/packages/eslint-config/README.md +++ b/packages/eslint-config/README.md @@ -15,6 +15,7 @@ npm install @naverpay/eslint-config -D [Note: `@typescript-eslint` 룰 중 일부는 `yaml`룰과 충돌할 수 있으니 유의하시기 바랍니다.](https://github.com/NaverPayDev/code-style/commit/948890376bb250d975e50d5f82e418a3eb50bb7c#diff-d6e0200228324b775c1bd5390161c9d64f8a4581b542d5e93463abe457cd73caR6-R15) - `react` - TS로 작성된 react17+ 환경에서 사용 - `strict` - 보다 엄격한 룰을 원하는 환경에서 위 config와 함께 사용 +- `packageJson` - package.json 파일에서 사용하는 룰을 추가 예시 `eslint.config.js` @@ -28,6 +29,7 @@ export default [ ...naverpay.configs.node, ...naverpay.configs.typescript, ...naverpay.configs.strict, + ...naverpay.configs.packageJson ] ``` diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md index 996c4a7..d57a7dc 100644 --- a/packages/eslint-plugin/README.md +++ b/packages/eslint-plugin/README.md @@ -44,3 +44,4 @@ export default [ | [sort-exports](docs/sort-exports.md) | 파일에 있는 모든 export 문을 정렬합니다. | 🔧 | | [svg-unique-id](docs/svg-unique-id.md) | 주어진 경로의 SVG 컴포넌트들에 고유한 id를 부여하는 HOC를 추가합니다. | 🔧 | | [import-server-only](docs/import-server-only.md) | 주어진 경로의 파일에 server-only 패키지를 포함하도록 강제합니다. | 🔧 | +| [peer-deps-in-dev-deps](docs/peer-deps-in-dev-deps.md) | `package.json`에서 동작하는 규칙으로, `peerDependencies` 에 있는 패키지가 `devDependencies` 에 선언되어 있지 않다면 에러를 발생시킵니다. | | diff --git a/packages/eslint-plugin/docs/peer-deps-in-dev-deps.md b/packages/eslint-plugin/docs/peer-deps-in-dev-deps.md new file mode 100644 index 0000000..0f938cc --- /dev/null +++ b/packages/eslint-plugin/docs/peer-deps-in-dev-deps.md @@ -0,0 +1,86 @@ +# `peer-deps-in-dev-deps` + +> **이 규칙은** `package.json`에 선언된 **모든 `peerDependencies`가 `devDependencies`에도 함께 선언되어 있는지** 검사합니다. + +## 설명 + +팀 내 프로젝트 관리나 모듈 의존성 관리를 할 때, `peerDependencies`로 선언된 라이브러리가 `devDependencies`에도 존재하지 않는다면 로컬 개발 환경이나 CI/CD 환경에서 빌드 에러, 혹은 호환성 문제가 발생할 수 있습니다. + +이 규칙은 `package.json` 파일을 확인하고, `peerDependencies` 항목에 있는 패키지가 `devDependencies`에도 선언되어 있는지 검사합니다. + +- **대상 파일**: `package.json` (파일명이 정확히 `"package.json"`일 때만 검사) +- **검사 내용**: `peerDependencies`에 선언된 패키지가 `devDependencies`에 없는 경우 오류 리포트 + +## 규칙 상세 + +### 발생하는 케이스 + +```jsonc +// package.json +{ + "peerDependencies": { + "example-lib": "^1.0.0" + } + // "devDependencies"에 "example-lib"가 없음 +} +``` + +```jsonc +// package.json +{ + "peerDependencies": { + "example-lib": "^1.0.0" + } + // "devDependencies"에 "example-lib"가 없음 + "devDependencies": { + + } +} +``` + +## 발생하지 않는 케이스 + +```jsonc +// package.json +{ + "peerDependencies": { + "example-lib": "^1.0.0" + }, + "devDependencies": { + "example-lib": "^1.0.0" + } +} +``` + +```jsonc +// package.json +{ + "peerDependencies": { + "example-lib": "^1.0.0" + }, + "devDependencies": { + // 버전은 검사하지 않습니다. + "example-lib": "^1.2.0" + } +} +``` + +## 옵션 + +이 규칙은 별도 옵션이 필요하지 않습니다. + +## 설정 + +```json +{ + "rules": { + "@naverpay/peer-deps-in-dev-deps": "error" + } +} +``` + +## 제한 + +- 이 규칙은 수정(fixable) 기능을 제공하지 않으므로, 자동으로 `devDependencies`에 패키지를 추가해주지 않습니다. 경고 혹은 에러를 보고하면 수동으로 `package.json` 파일을 수정해야 합니다. + - 개발하시는 패키지에서 필요한 버전을 특정할 수 없어 발생한 제약 입니다. +- 파일명이 정확히 `package.json`이 아니면 검사 대상에서 제외됩니다.