Changesets는 모노레포에서 패키지 버전 관리와 변경 로그 생성을 자동화하는 도구다. PR 단위로 변경 사항을 추적하고, 릴리즈 시 semver에 따라 버전을 업데이트한다.
동작 흐름
1. 개발자: changeset 파일 생성 (변경 유형 + 설명)
└── .changeset/funny-bears-eat.md
2. PR 머지 시 "Version Packages" PR 자동 생성
└── 버전 번프 + CHANGELOG 업데이트
3. "Version Packages" PR 머지 시 npm 배포
설치 및 초기화
bash
# 설치
npm install --save-dev @changesets/cli
# 초기화
npx changeset init
# 새 changeset 생성 (대화형)
npx changeset
# → 영향받은 패키지 선택
# → major/minor/patch 선택
# → 변경 설명 입력
changeset 파일 예시
markdown
---
"@myapp/ui": minor
"@myapp/utils": patch
---
Button 컴포넌트에 variant 프로퍼티 추가
- primary, secondary, danger 세 가지 variant 지원
- 기존 API는 하위 호환 유지
GitHub Actions 통합
yaml
name: Release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: 버전 PR 생성 또는 배포
uses: changesets/action@v1
with:
publish: npm run release
version: npm run version
commit: "chore: version packages"
title: "chore: version packages"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
.changeset/config.json
json
{
"$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [["@myapp/ui", "@myapp/icons"]],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": ["@myapp/e2e"]
}
관련 문서