pnpm에서 changesets 사용하기

팁

버전 v11.13.0부터 pnpm은 Changesets CLI 없이도 워크스페이스 릴리스를 기본적으로 관리할 수 있습니다. 이 기능은 동일한 .changeset/*.md 파일을 읽고 씁니다. 릴리스 관리를 참고하세요.

버전 v11.16.0부터 pnpm update --changeset은 업데이트로 인한 종속성 버전 상승에 대한 changeset도 작성할 수 있습니다.

참고

이 문서를 작성할 당시 최신 pnpm 버전은 v10.4.1이었습니다. 최신 Changesets 버전은 v2.28.0이었습니다.

설치#

pnpm 워크스페이스에서 changesets를 설정하려면 워크스페이스의 루트에서 개발 의존성으로 changesets를 설치하세요.

pnpm add -Dw @changesets/cli

그런 다음 changesets의 init 명령을 실행하여 changesets 설정을 생성하세요:

pnpm changeset init

새 changesets 추가하기#

새 changesets를 생성하려면 저장소의 루트에서 pnpm changeset를 실행하세요. .changeset 디렉토리에 생성된 마크다운 파일은 저장소에 커밋되어야 합니다.

변경 사항 릴리즈하기#

  1. pnpm changeset version 을 실행합니다. pnpm changeset (및 이들의 의존 항목)로 지정된 패키지의 버전을 bump하고 changelog 파일을 업데이트합니다.
  2. pnpm install 를 실행합니다. 이를 통해 lockfile을 업데이트하고 패키지를 재빌드합니다.
  3. 변경 사항을 커밋합니다.
  4. pnpm publish -r를 실행합니다. 이 명령어는 아직 레지스트리에 없고 버전 충돌된 모든 패키지들을 게시합니다.

GitHub Actions와의 통합#

프로세스를 자동화하기 위해 changeset version 를 GitHub Action과 함께 사용할 수 있습니다. changeset 파일이 main 브랜치에 도착하면 action이 감지하며, bump된 버전에 대한 모든 패키지를 나열하는 새 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을 생성하므로, Actions에 읽기 및 쓰기 권한을 저장소 설정(github.com/<repo-owner>/<repo-name>/settings/actions)에서 부여해야 합니다. changesets/action 단계에 publish 입력을 포함하는 경우, 저장소에 npm 인증 토큰을 NPM_TOKEN이라는 이름의 저장소 시크릿으로 추가해야 합니다.

.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 and Node.js
        uses: pnpm/setup@v2
        with:
          runtime: node@20
          cache: true

      - 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 액션 관련 문서는 여기에서 확인할 수 있습니다.