pnpm + tsdown으로 React 라이브러리 만들기 ④ - 라이브러리 배포
pnpm + tsdown으로 React 라이브러리를 만드는 과정에서 라이브러리 배포 방법에 대해 정리한 페이지입니다.
Tags
monorepo, OIDC, pnpm, React, Release Please, tsdown
Environment
pnpm v10.32.1
react v19.2.3
tsdown v0.21.3
@tsdown/css v0.21.4
1. 개요
pnpm + tsdown으로 React 라이브러리를 만드는 방법에 대해 정리한 페이지입니다.
총 5개의 Part로 분리하여 작성하였으며, 이 페이지에서는 라이브러리 배포 과정을 다룹니다.
- 1. 프로젝트 초기화하기
- 2. React 라이브러리 생성하기
- 3. Next.js demo 생성하기
- 4. 라이브러리 배포하기
- 5. demo 배포하기
2. 라이브러리 수동 배포하기
2.1. npm 회원가입하기
npm | Home에 접속하여 회원가입을 진행합니다.
2.2. npm 로그인하기
다음 명령어를 입력하여 npm에 로그인합니다.
1npm login2.3. npm에 수동 배포하기
배포하려는 라이브러리 패키지에서 다음 명령어를 입력하여 npm에 라이브러리를 배포합니다.
1npm publish --access public--access public 옵션은 공개 패키지를 배포할 때 사용합니다. 이 옵션을 생략하면 기본적으로 개인 패키지로 배포됩니다.
3. 라이브러리 자동 배포하기
이 문단에서는 GitHub Actions로 라이브러리를 자동 배포하는 과정을 설명합니다.
이 문단에서 다루는 라이브러리 자동 배포 과정은 다음과 같습니다.
- GitHub Repository에 라이브러리 코드를 push
- Release Please를 통해 Release PR 생성
- PR merge 이후 Tag 생성 및 라이브러리를 자동 배포
npm에 라이브러리를 자동 배포하기 위해선 Granular Access Token 또는 OIDC 방식을 사용할 수 있습니다.
Granular Access Token의 경우 만료 기간이 지나면 다시 생성해야 하므로,
이 문단에서는 OIDC 방식을 사용할 예정이며, 이를 위해 먼저 npm에 라이브러리가 배포되어 있는 상태여야 합니다.
3.1. OIDC (OpenID Connect) 설정하기
먼저 다음과 같이 배포된 라이브러리 페이지에 접속하여 Settings 탭을 클릭합니다.
이후 다음과 같이 Trusted Publisher를 등록합니다.
마지막으로 Publishing access 항목에서 Require two-factor authentication and disallow tokens (recommended) 을 선택하고 패키지 설정을 업데이트합니다.
3.2. release-please.yml 생성하기
.github/workflows 디렉토리에 release-please.yml 파일을 생성한 후 다음과 같이 작성합니다.
1# workflow 이름 설정
2name: Release Please
3
4# workflow를 트리거하는 이벤트 설정
5on:
6 push:
7 branches: ["main"]
8
9permissions:
10 contents: write
11 issues: write
12 pull-requests: write
13
14# 실행할 jobs 설정
15jobs:
16 release-please:
17 # Ubuntu 환경에서 실행
18 runs-on: ubuntu-latest
19
20 steps:
21 - name: Run Release Please
22 uses: googleapis/release-please-action@v4
23 with:
24 release-type: node
25 path: packages/react-toc
26 token: ${{ secrets.PAT }}위의 workflow에서 중요한 부분은 바로 token 설정 부분입니다.
Release Please는 기본적으로 GITHUB_TOKEN을 사용하지만,
GITHUB_TOKEN으로 발생한 이벤트는 다른 workflow를 트리거하지 않습니다.
따라서 PAT이라는 Personal Access Token을 사용해야 합니다.
3.3. Personal Access Token 생성하기
PAT을 사용하려면 GitHub에서 Personal Access Token을 생성해야 합니다.
먼저 GitHub에서 로그인 한 후, 본인의 프로필을 클릭해 Settings > Developer settings 로 이동합니다.
다음으로 Personal access tokens > Fine-grained tokens > Generator new token 을 순서대로 클릭합니다.
아래와 같은 페이지에서 Personal Access Token을 생성할 수 있습니다.
Permissions 항목에서 Actions, Contents, Pull requests를 선택하고 Access:Read and Write를 선택합니다.
Metadata는 Actions 선택 시 자동으로 추가됩니다.
Generate token 버튼을 클릭하면 Personal Access Token이 생성됩니다. 주의할 점은 해당 페이지에서 보이는 토큰은 다시 볼 수 없으므로 토큰을 복사하여 보관해야 합니다.
3.4. GitHub Secrets 설정하기
생성한 Personal Access Token을 GitHub Actions에서 사용하려면 GitHub Secrets에 추가해야 합니다.
다음과 같이 GitHub Repository 내에서 Settings > Secrets and variable > Actions로 이동합니다.
이후 New repository secret 버튼을 클릭하여 새로운 secret을 생성합니다.
Name을 PAT으로, 내용에는 복사한 Personal Access Token을 붙여넣으면 됩니다.
3.5. publish.yml 생성하기
.github/workflows 디렉토리에 publish.yml 파일을 생성한 후 다음과 같이 작성합니다.
1# workflow 이름 설정
2name: Publish to npm
3
4# workflow를 트리거하는 이벤트 설정
5on:
6 push:
7 tags:
8 - "v*"
9
10permissions:
11 id-token: write # Required for OIDC
12 contents: write
13
14# 실행할 jobs 설정
15jobs:
16 publish:
17 # Ubuntu 환경에서 실행
18 runs-on: ubuntu-latest
19
20 steps:
21 - name: Checkout code
22 uses: actions/checkout@v6
23
24 - name: Setup pnpm
25 uses: pnpm/action-setup@v4
26
27 - name: Install Node.js
28 uses: actions/setup-node@v6
29 with:
30 # Node.js 버전 설정
31 node-version: 24
32 registry-url: "https://registry.npmjs.org"
33 cache: "pnpm"
34
35 - name: Install dependencies
36 run: pnpm install --frozen-lockfile
37
38 - name: Build local package
39 run: pnpm --filter ./packages/react-toc run build
40
41 - name: Publish to npm
42 run: pnpm --filter ./packages/react-toc publish --access public --no-git-checks --provenance위의 workflow 설정 중 중요한 부분에 대해 설명하자면 다음과 같습니다.
3.5.1. permissions
1permissions:
2 id-token: write # Required for OIDC
3 contents: writeOIDC 방식을 사용하기 위해 id-token: write permission이 반드시 필요합니다.
3.5.2. --provenance
1- name: Publish to npm
2 run: pnpm --filter ./packages/react-toc publish --access public --no-git-checks --provenance라이브러리를 npm에 배포하는 부분입니다.
--provenance 옵션을 사용하면 npm에 "이 패키지가 GitHub Actions에서 만들어졌다"는 보안 서명을 추가할 수 있습니다.
3.6. 라이브러리 자동 배포 결과
라이브러리를 자동 배포한 결과는 다음과 같습니다.
4. 다음 Part
다음 글에서는 GitHub Pages에 demo를 정적 배포하는 과정을 다룹니다.
5. 참고 자료
- React+typescript 컴포넌트 라이브러리 생성하기 ③rollup 설정 — 콩부합시다
- 고티켓-react 컴포넌트 라이브러리 만들기(3)-rollup — 이찬진 컴퓨터 교실
- esbuild vs rollup vs webpack vs tsup | "웹 자바스크립트 번들러" npm 패키지 비교
- 리액트 컴포넌트 라이브러리를 빌드하고 배포하는 방법 — React와 TypeScript를 좋아하는 개발자
- 리액트 라이브러리 npm에 배포하기 with rollup
- rolldown/tsdown: The elegant bundler for libraries powered by Rolldown
- Nextra - Next.js Static Site Generator
- HyunJinNo/react-toc: A library that automatically generates a Table of Contents (TOC) from your headings with scroll tracking.
- Trusted publishing for npm packages | npm Docs
- npm의 보안 업데이트 이후 자동배포하기
- googleapis/release-please-action: automated releases based on conventional commits