Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/eslint-config/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`

Expand All @@ -28,6 +29,7 @@ export default [
...naverpay.configs.node,
...naverpay.configs.typescript,
...naverpay.configs.strict,
...naverpay.configs.packageJson
]
```

Expand Down
1 change: 1 addition & 0 deletions packages/eslint-plugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` 에 선언되어 있지 않다면 에러를 발생시킵니다. | |
86 changes: 86 additions & 0 deletions packages/eslint-plugin/docs/peer-deps-in-dev-deps.md
Original file line number Diff line number Diff line change
@@ -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`이 아니면 검사 대상에서 제외됩니다.