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 디렉터리에 생성된 마크다운 파일은 저장소에 커밋해야 합니다.

변경 사항 릴리즈하기#

  1. pnpm changeset version을 실행하세요. 이렇게 하면 이전에 pnpm changeset으로 지정한 패키지(및 이에 종속된 패키지)의 버전이 올라가고 changelog 파일이 업데이트됩니다.
  2. pnpm install을 실행하세요. 이를 통해 lockfile을 업데이트하고 패키지를 재빌드합니다.
  3. 변경 사항을 커밋합니다.
  4. 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 액션 정보와 문서는 여기에서 확인할 수 있습니다.