npm에 라이브러리 릴리즈하고 운영하기
안녕하세요. 오늘은 npm 라이브러리를 릴리즈하고 운영한 경험을 이야기해 보려고 합니다.
Github Action으로 자동배포, Github Template, 오픈소스에 기여하고 홍보하기에 대한 내용을 함께 담아 보겠습니다.
목차
- react-vite-ts-boilerplate 소개
- Github Action으로 자동배포
- Github Template
- 오픈소스에 기여하고 홍보하기
- 마무리
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를 활용해서 넣고 싶은 기능은 체크해서 넣어보았습니다. 굵직한 내용은 아래에서 좀 더 자세히 설명해 보겠습니다.
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 자동 작성 - 링크
github actions에 npm publish
까지 하도록 토큰 설정까지 하면 업데이트된 버전으로 npm에 배포까지 진행됩니다. 버전 업데이트는 사람이 하더라도 배포는 자동화가 꼭 필요한 것 같습니다. (너무나 귀찮은…)
3. Github Template
제가 만든 라이브러리는 github template으로도 사용이 가능합니다.
Repository > Settings > General
에서 Template repository
에 체크하고 저장하면 됩니다. 본인의 레포지토리 생성 시나 다른 사람도 이 레포를 통해 기반코드를 만들고 시작할 수 있어서 편합니다.
일종의 홍보 효과도 있을 수도..?!
4. 오픈소스에 기여하고 홍보하기
이 라이브러리는 Vite를 사용하여 만든 템플릿입니다. vite에서 awesome-vite라는 vite template을 올릴 수 있는 레포지토리를 만들어 두었습니다.
여기에 올려두면 좀 더 많은 사람들에게 닿고 작지만 오픈소스 기여하는 경험도 될 수 있을 것 같아서 도전해 보았습니다.
아래는 머지된 PR입니다. 레포를 fork 하고 README에 본인의 템플릿을 설명과 함께 추가합니다. 여기서 주의해야 할 점은 이 레포에서의 규칙을 잘 따라야 한다는 것입니다.
github actions가 엄청 많이 도는데, 여기서 린트 에러가 발생해서 코멘트가 달리면서 리젝을 한 번 당했습니다.
그리고 신기했던 부분은 PR template에 많은 체크리스트가 있었다는 점입니다. 많은 기여자가 있는 만큼 스스로 체크하고 PR을 open 하라는 뜻인 것 같습니다.
시간이 많이 지나긴 했지만.. 기여로 남은 잔디를 캡쳐해 보았습니다.
5. 마무리
이게 홍보 효과가 있었는지 별이 많이 찍히기도 하고 Issue를 작성해 준 분도 있었습니다. 오픈소스로 이루어져 있기 때문에 라이브러리를 만들 때 Issue, PR 작성 규칙을 잘 작성해 두는 것도 필요할 것 같습니다.
이 글을 작성하면서 당시 잘 이해하지 못했거나 에러나는 부분들을 고치기도 했는데, 지속적으로 관심을 가지면서 발전시켜 봐야겠다는 생각도 들었습니다.