# Migration Guide: v1.x → v2.0

## Breaking Changes

**v2.0에서는 모든 ESLint 플러그인이 peer dependencies로 이동했습니다.**

이는 업계 표준 패턴(eslint-config-airbnb와 동일)을 따르기 위한 변경입니다.

### 왜 이 변경이 필요한가요?

1. **버전 충돌 방지**
   - 프로젝트의 prettier, React 버전과 충돌하지 않음
   - 원하는 플러그인 버전을 직접 선택 가능

2. **중복 설치 방지**
   - prettier가 두 번 설치되는 문제 해결
   - node_modules 크기 감소

3. **업계 표준 준수**
   - eslint-config-airbnb, eslint-config-standard와 동일한 패턴
   - ESLint 공식 권장사항 준수

---

## Migration Steps

### Option 1: Automatic (권장)

`install-peerdeps`를 사용하여 자동으로 업그레이드:

```bash
# 기존 버전 제거
npm uninstall @wishket/eslint-config-wishket

# 새 버전과 모든 peer dependencies 자동 설치
npx install-peerdeps --dev @wishket/eslint-config-wishket
```

**Yarn 사용 시:**

```bash
yarn remove @wishket/eslint-config-wishket
npx install-peerdeps --dev @wishket/eslint-config-wishket
```

### Option 2: Manual

#### Step 1: 버전 업그레이드

```bash
npm install --save-dev @wishket/eslint-config-wishket@latest
```

#### Step 2: Peer Dependencies 확인

다음 명령어로 필요한 peer dependencies를 확인:

```bash
npm info "@wishket/eslint-config-wishket@latest" peerDependencies
```

#### Step 3: 누락된 패키지 설치

대부분의 프로젝트는 이미 일부 패키지가 설치되어 있을 것입니다. 누락된 패키지만 설치하세요:

```bash
npm install --save-dev \
  eslint \
  typescript \
  prettier \
  @typescript-eslint/eslint-plugin \
  @typescript-eslint/parser \
  eslint-plugin-file-export-name \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-jest-dom \
  eslint-plugin-jest-formatting \
  eslint-plugin-n \
  eslint-plugin-naming-convention \
  eslint-plugin-prettier \
  eslint-plugin-promise \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-testing-library \
  eslint-plugin-unused-imports
```

---

## Troubleshooting

### Peer Dependency Warnings

업그레이드 후 peer dependency 경고가 표시되면:

```bash
npm WARN @wishket/eslint-config-wishket@2.0.0 requires a peer of prettier@>=3.0.0 but none is installed.
```

**해결 방법:**

```bash
npm install --save-dev prettier
```

### Version Conflicts

기존에 설치된 플러그인 버전이 요구사항을 만족하지 않는 경우:

```bash
npm ERR! peer dep missing: eslint-plugin-react@^7.0.0
```

**해결 방법:**

```bash
npm install --save-dev eslint-plugin-react@^7.0.0
```

또는 `--legacy-peer-deps` 플래그 사용:

```bash
npm install --legacy-peer-deps
```

### 이미 설치된 패키지 확인

현재 설치된 버전을 확인하려면:

```bash
npm list eslint prettier @typescript-eslint/eslint-plugin
```

---

## What Changed

### Before (v1.x)

```json
{
  "dependencies": {
    "@wishket/eslint-config-wishket": "^1.1.0"
  }
}
```

모든 플러그인이 자동으로 설치됨 (17개 패키지).

### After (v2.0)

```json
{
  "dependencies": {
    "@wishket/eslint-config-wishket": "^2.0.0",
    "eslint": "^8.0.0",
    "typescript": "^5.0.0",
    "prettier": "^3.0.0",
    "@typescript-eslint/eslint-plugin": "^8.0.0",
    "@typescript-eslint/parser": "^8.0.0",
    "eslint-plugin-file-export-name": "^0.0.2",
    "eslint-plugin-import": "^2.0.0",
    "eslint-plugin-jest": "^29.0.0",
    "eslint-plugin-jest-dom": "^5.0.0",
    "eslint-plugin-jest-formatting": "^3.0.0",
    "eslint-plugin-n": "^17.0.0",
    "eslint-plugin-naming-convention": "^0.1.0",
    "eslint-plugin-prettier": "^5.0.0",
    "eslint-plugin-promise": "^7.0.0",
    "eslint-plugin-react": "^7.0.0",
    "eslint-plugin-react-hooks": "^4.0.0",
    "eslint-plugin-testing-library": "^7.0.0",
    "eslint-plugin-unused-imports": "^4.0.0"
  }
}
```

플러그인을 명시적으로 설치해야 함.

---

## Optional Dependencies

다음 dependencies는 선택사항입니다. 사용하지 않는 경우 설치하지 않아도 됩니다:

- `typescript` - JavaScript 전용 프로젝트
- `eslint-plugin-jest` - Jest를 사용하지 않는 경우
- `eslint-plugin-jest-dom` - Jest DOM을 사용하지 않는 경우
- `eslint-plugin-jest-formatting` - Jest 포맷팅이 필요 없는 경우
- `eslint-plugin-testing-library` - Testing Library를 사용하지 않는 경우

---

## Benefits

### 1. 버전 제어

이제 프로젝트의 요구사항에 맞게 플러그인 버전을 직접 선택할 수 있습니다:

```json
{
  "dependencies": {
    "prettier": "^3.5.0",  // 프로젝트 표준
    "eslint-plugin-react": "^7.35.0"  // 특정 버전 필요
  }
}
```

### 2. 중복 제거

prettier가 두 번 설치되는 문제가 해결됩니다:

```bash
# Before
node_modules/
  prettier@3.6.2  (from @wishket/eslint-config-wishket)
  prettier@3.5.0  (from your project)

# After
node_modules/
  prettier@3.5.0  (your project version)
```

### 3. 더 작은 패키지 크기

@wishket/eslint-config-wishket 패키지 자체의 크기가 크게 줄어듭니다 (설정만 포함).

---

## Need Help?

문제가 발생하면:

1. **Peer Dependencies 확인**
   ```bash
   npm info "@wishket/eslint-config-wishket@latest" peerDependencies
   ```

2. **현재 설치된 버전 확인**
   ```bash
   npm list
   ```

3. **Clean Install**
   ```bash
   rm -rf node_modules package-lock.json
   npm install
   ```

4. **GitHub Issues**
   - 버그 리포트: https://github.com/wishket/eslint-config-wishket/issues
