pnpm에서 changesets 사용하기
참고
이 문서를 작성할 당시 최신 pnpm 버전은 v10.4.1이었습니다. Changesets의 최신 버전은 v2.28.0이었습니다.
설치#
pnpm 워크스페이스에서 changesets를 설정하려면 워크스페이스의 루트에서 개발 의존성으로 changesets를 설치하세요.
pnpm add -Dw @changesets/cli
그런 다음 changesets의 init 명령을 실행하여 changesets 설정을 생성하세요:
pnpm changeset init
새 changesets 추가하기#
새 changeset을 생성하려면 저장소 루트에서 pnpm changeset을 실행하세요.
.changeset 디렉터리에 생성된 마크다운 파일은 저장소에 커밋해야 합니다.
변경 사항 릴리즈하기#
pnpm changeset version을 실행하세요. 이렇게 하면 이전에pnpm changeset으로 지정한 패키지(및 이에 종속된 패키지)의 버전이 올라가고 changelog 파일이 업데이트됩니다.pnpm install을 실행하세요. 이를 통해 lockfile을 업데이트하고 패키지를 재빌드합니다.- 변경 사항을 커밋합니다.
pnpm publish -r을 실행하세요. 이 명령은 버전이 올라갔지만 아직 레지스트리에 없는 모든 패키지를 게시합니다.
GitHub Actions와의 통합#
이 과정을 자동화하려면 GitHub Actions와 함께 changeset version을 사용할 수 있습니다. 이 액션은 changeset 파일이 main 브랜치에 들어오는 것을 감지하고, 버전이 올라간 모든 패키지를 나열하는 새 PR을 엽니다. 이 PR은 새 changeset 파일이 main에 들어올 때마다 자동으로 업데이트됩니다. 병합되면 패키지가 업데이트되며, 액션에 publish 입력이 지정되어 있으면 지정된 명령을 사용하여 게시됩니다.
게시 스크립트 추가#
pnpm publish -r을 실행하는 ci:publish라는 새 스크립트를 추가하세요. 이렇게 하면 changeset version이 만든 PR이 병합되었을 때 레지스트리에 게시됩니다. 패키지가 공개이면서 스코프가 있는 경우, npm이 게시를 거부하지 않도록 --access=public을 추가해야 할 수 있습니다.
package.json
{
"scripts": {
"ci:publish": "pnpm publish -r"
},
...
}
워크플로 추가#
.github/workflows/changesets.yml에 새 워크플로를 추가하세요. 이 워크플로는 새 브랜치와 PR을 생성하므로, 저장소 설정(github.com/<repo-owner>/<repo-name>/settings/actions)에서 Actions에 읽기 및 쓰기 권한을 부여해야 합니다. changesets/action 단계에 publish 입력을 포함하는 경우, 저장소에 NPM_TOKEN이라는 이름의 저장소 시크릿으로 npm 인증 토큰도 등록해야 합니다.
.github/workflows/changesets.yml
name: Changesets
on:
push:
branches:
- main
env:
CI: true
jobs:
version:
timeout-minutes: 15
runs-on: ubuntu-latest
steps:
- name: Checkout code repository
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Create and publish versions
uses: changesets/action@v1
with:
commit: "chore: update versions"
title: "chore: update versions"
publish: pnpm ci:publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
자세한 changesets 액션 정보와 문서는 여기에서 확인할 수 있습니다.