개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (287)
    • Web Front End (76)
      • Javascript & Typescript (26)
      • React (12)
      • Vue (4)
      • Nodejs (1)
      • HTML (6)
      • CSS (8)
      • HTTP (6)
      • 책 - Review (8)
    • TIL (0)
    • Problem Solved (135)
      • 알고리즘 (4)
      • BOJ (67)
      • Programmers (8)
      • HackerRank (33)
      • LeetCode (23)
    • 회고 (4)
      • 오늘의 회고 (16)
      • 주간 회고 (15)
      • 월간 회고 (7)
      • WakaTime (9)
    • Git (3)
    • 기타 (15)
      • 취업 (5)
      • 자격증 (1)

블로그 메뉴

  • GitHub
  • LinkedIn
  • 홈

인기 글

태그

  • 회고
  • 프론트엔드
  • 노개북
  • 개발자
  • 노마드북클럽
  • 자바스크립트
  • 릿코드
  • JavaScript
  • 오늘의회고
  • TypeScript

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
개발후라이

개발후라이

npm에 라이브러리 릴리즈하고 운영하기
Web Front End/Javascript & Typescript

npm에 라이브러리 릴리즈하고 운영하기

2024. 2. 3. 23:03
반응형

npm에 라이브러리 릴리즈하고 운영하기

안녕하세요. 오늘은 npm 라이브러리를 릴리즈하고 운영한 경험을 이야기해 보려고 합니다.
Github Action으로 자동배포, Github Template, 오픈소스에 기여하고 홍보하기에 대한 내용을 함께 담아 보겠습니다.

목차

  1. react-vite-ts-boilerplate 소개
  2. Github Action으로 자동배포
  3. Github Template
  4. 오픈소스에 기여하고 홍보하기
  5. 마무리

1. react-vite-ts-boilerplate 소개

  • npm 링크: https://www.npmjs.com/package/react-vite-ts-boilerplate
  • github 링크: https://github.com/choisohyun/react-vite-ts-boilerplate

이 라이브러리의 컨셉은 ‘Very Fast React Boilerplate’입니다. 당시 제가 관심 있던 Vite와 React, 다른 개발 구성 요소를 섞어 만들었습니다.

Getting started를 보면 create-react-app처럼 명령어를 통해 프로젝트를 구성해 주는 역할도 할 수 있습니다. 사실 이 기능을 만들어 보고 싶어서 시작하게 되었습니다. ㅎㅎ

Issue와 Pull Request를 활용해서 넣고 싶은 기능은 체크해서 넣어보았습니다. 굵직한 내용은 아래에서 좀 더 자세히 설명해 보겠습니다.

Screenshot_2024-01-23_at_9 39 22_PM

2. Github Action으로 자동배포

npm에 배포하는 것은 처음은 로컬로 가능하지만, 계속 운영할 예정이라면 자동배포가 필요하다고 생각했습니다.

버전을 자동으로 업데이트되게 하려면 semantic commit 규칙을 따라 작성해야 합니다. 이를 위해 커밋 메시지를 관리하는 husky, commitlint, lint-staged를 사용하였습니다. commitlint의 컨벤션을 따르도록 아래와 같이 설정했습니다.

  // package.json    
  "commitlint": {
    "extends": [
      "@commitlint/config-conventional"
    ]
  },
    "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
      "pre-commit": "lint-staged"
    }
  },

main에 작성한 기능이 머지되고 나면 github actions가 트리거 되면서 버전을 올리는 봇을 실행하고 npm에 배포가 되는 흐름을 생각했습니다.

버전 관리에는 semantic release를 사용했는데, 이 패키지는 커밋 메시지를 규칙에 따라 다음 버전을 결정하고 로그를 생성하는 역할을 합니다. 커밋 분석, changelog 작성 등 설정하고 싶은 플러그인들을 추가해 주었습니다.

// .releaserc
{
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/changelog",
    "@semantic-release/release-notes-generator",
    ["@semantic-release/npm", {
      "npmPublish": false,
    }],
    "@semantic-release/git"
  ]
}

자동 배포는 semantic release를 위해 생성된 액션인 Action For Semantic Release를 사용했습니다.

GITHUB_TOKEN 와 NPM_TOKEN을 secrets로 설정해 두면 사용할 수 있어서 간편하게 적용할 수 있었습니다.

// .github/workflows/cd.yaml
steps:
  - name: Checkout
    uses: actions/checkout@v4
  - name: Semantic Release
    uses: cycjimmy/semantic-release-action@v4
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

이렇게 설정이 제대로 되면 main에 머지됐을 때 아래 작업을 완수합니다.

  • 버전 자동 업데이트
  • 버전 업데이트 커밋 자동 생성
  • changelog 자동 작성 - 링크

Screenshot_2024-01-24_at_9 50 23_PMScreenshot_2024-02-02_at_9 57 43_PM

github actions에 npm publish까지 하도록 토큰 설정까지 하면 업데이트된 버전으로 npm에 배포까지 진행됩니다. 버전 업데이트는 사람이 하더라도 배포는 자동화가 꼭 필요한 것 같습니다. (너무나 귀찮은…)

3. Github Template

제가 만든 라이브러리는 github template으로도 사용이 가능합니다.

Repository > Settings > General에서 Template repository에 체크하고 저장하면 됩니다. 본인의 레포지토리 생성 시나 다른 사람도 이 레포를 통해 기반코드를 만들고 시작할 수 있어서 편합니다.

일종의 홍보 효과도 있을 수도..?!

Screenshot_2024-01-24_at_9 18 52_PMScreenshot_2024-01-24_at_9 11 50_PMScreenshot_2024-01-24_at_9 17 13_PMScreenshot_2024-01-24_at_9 16 44_PM

4. 오픈소스에 기여하고 홍보하기

이 라이브러리는 Vite를 사용하여 만든 템플릿입니다. vite에서 awesome-vite라는 vite template을 올릴 수 있는 레포지토리를 만들어 두었습니다.

여기에 올려두면 좀 더 많은 사람들에게 닿고 작지만 오픈소스 기여하는 경험도 될 수 있을 것 같아서 도전해 보았습니다.

아래는 머지된 PR입니다. 레포를 fork 하고 README에 본인의 템플릿을 설명과 함께 추가합니다. 여기서 주의해야 할 점은 이 레포에서의 규칙을 잘 따라야 한다는 것입니다.

github actions가 엄청 많이 도는데, 여기서 린트 에러가 발생해서 코멘트가 달리면서 리젝을 한 번 당했습니다.

Screenshot_2024-01-24_at_9 14 43_PM

그리고 신기했던 부분은 PR template에 많은 체크리스트가 있었다는 점입니다. 많은 기여자가 있는 만큼 스스로 체크하고 PR을 open 하라는 뜻인 것 같습니다.

Screenshot_2024-01-24_at_9 15 28_PM

시간이 많이 지나긴 했지만.. 기여로 남은 잔디를 캡쳐해 보았습니다.

Screenshot_2024-01-24_at_9 12 46_PM

5. 마무리

이게 홍보 효과가 있었는지 별이 많이 찍히기도 하고 Issue를 작성해 준 분도 있었습니다. 오픈소스로 이루어져 있기 때문에 라이브러리를 만들 때 Issue, PR 작성 규칙을 잘 작성해 두는 것도 필요할 것 같습니다.

이 글을 작성하면서 당시 잘 이해하지 못했거나 에러나는 부분들을 고치기도 했는데, 지속적으로 관심을 가지면서 발전시켜 봐야겠다는 생각도 들었습니다.

반응형
저작자표시 (새창열림)
    'Web Front End/Javascript & Typescript' 카테고리의 다른 글
    • React Query 살펴보기
    • SvelteKit에는 왜 Vite가 선택되었을까? "Vite VS Snowpack"
    • [Typescript Challenges] Awaited, If, Concat
    • [Typescript Challenges] First of Array, Length of Tuple, Exclude
    개발후라이
    개발후라이
    어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

    티스토리툴바