이번에 lerna를 이용하는 패키지를 nexus에 배포하며 테스트 할 일이 생겼습니다. 변경된 부분만 빠르게 beta-1,-2로 업데이트하여 모든 패키지를 업데이트 하지 않고 일부분만 변경하고 싶어 lerna publish 를 공부하게 됐습니다.
Versioning
lerna version command는 패키지의 버전 번호를 높이고, 변경 사항을 커밋하고 그에 따라 태그를 지정할 수 있는 명령이 함께 제공됩니다.
lerna version --no-private // private package는 제외됩니다.
lerna notice cli v5.1.2
lerna info current version 1.0.0
lerna info Assuming all packages changed
? Select a new version (currently 1.0.0) (Use arrow keys)
❯ Patch (1.0.1)
Minor (1.1.0)
Major (2.0.0)
Prepatch (1.0.1-alpha.0)
Preminor (1.1.0-alpha.0)
Premajor (2.0.0-alpha.0)
Custom Prerelease
Custom Version
lerna에서 자동으로 현재 패키지 버전을 찾고, 다음 버전으로 업데이트 하게 됩니다. 만약 lerna.json에 version property가 있다면 현재 버전을 찾을 때 이 정보를 이용합니다.
Publishing to NPM
lerna publish --no-private
lerna notice cli v5.1.2
lerna info current version 1.0.0
lerna info Assuming all packages changed
? Select a new version (currently 1.0.0) Patch (1.0.1)
Changes:
- footer: 1.0.0 => 1.0.1
- header: 1.0.0 => 1.0.1
? Are you sure you want to publish these packages? Yes
lerna info execute Skipping releases
lerna info git Pushing tags...
lerna info publish Publishing packages to npm...
...
lerna success published header 1.0.1
...
lerna success published footer 1.0.1
...
Successfully published:
- footer@1.0.1
- header@1.0.1
lerna success published 2 packages
또는 다음과 같이 배포할 수 있습니다.
lerna publish from-package
Versioniing strategies
Fixed/Lock mode (default)
기본적으로 lerna.json에 버전이 명시되어 있고 lerna publish를 진행하면 새로운 버전 태그를 자동으로 만들어서 publish하게 되어있습니다. 모든 패키지들의 버전을 단일하게 가져갈 수 있고 모든 패키지의 주요 변경으로 인한 주요 버전 업데이트를 하나로 묶을 수 있습니다. 만약 이후에 변경된 패키지만 출시하고 싶다면 lerna version --force-publish 옵션과 함께 사용하면 됩니다.
Independent mode
npx lerna init --independent
서로 독립적으로 패키지 버전을 늘릴 수 있습니다. 게시할 때마다 변경된 각 패키지에 대해 패치, 사소한 변경, 주요 변경 또는 사용자 정의 변경인지 지정하라는 메시지가 표시됩니다.
Command Line Interface (CLI)
이번에 사용한 커맨드 라인은 prepatch와 prerelease 였습니다.
lerna version prerelease
# uses the next semantic prerelease version, e.g.
# 1.0.0 => 1.0.1-alpha.0
lerna version prepatch --preid next
# uses the next semantic prerelease version with a specific prerelease identifier, e.g.
# 1.0.0 => 1.0.1-next.0
lerna version을 입력하고 원하는 버전을 선택하는게 아닌 스크립트를 package.json에 넣어두고 사용하고 싶었기는데 원하는 문서가 lerna docs가 아닌 yarnpkg @lerna에 있었습니다. 다른 명령어도 참고하기 위해 링크를 적어두겠습니다.
https://yarnpkg.com/package?name=@lerna/version
https://lerna.js.org/docs/features/version-and-publish
'software engineering > devops' 카테고리의 다른 글
pnpm link (1) | 2023.10.29 |
---|---|
TRPC, GraphQL, Restful API (0) | 2023.01.03 |
OpenAPI + Typescript (0) | 2022.10.18 |
Jenkins, GitHub Actions (0) | 2022.08.31 |
Lambda cold start (0) | 2022.08.29 |