Lerna - 패키지 버전 관리 및 발행 (3)

2 minute read

이번 편에서는 사용자가 생성한 Lerna 프로젝트의 패키지의 버전관리 및 발행에 대해서 알아보겠습니다. 만약 해당 프로젝트가 git 과 연결되어 있다면 Lerna 는 발행시에 버전을 설정하고 git 저정소에 해당 프로젝트를 자동으로 push 할 수 있습니다.

STEP1: 패키지 발행 - Lerna Publish

터미널에 publish 명령을 실행해 봅시다.
사용자는 패키지의 내용을 입력하고 commit 메시지를 작성했다고 가정합니다.

$ lerna publish
  • lerna publish : 마지막 릴리즈 이후 변경된 패키지 게시
  • lerna publish from-git : 현재 커밋에 태그가 지정된 패키지를 명시적으로 게시
  • lerna publish from-package : 레지스트리에 최신 버전이 없는 패키지를 명시적으로 게시

위 명령을 실행하면 다음 중 하나가 수행됩니다.

  • 마지막 릴리즈 이후에 업데이트 된 패키지를 게시합니다
  • 현재 커밋에 태그가 지정된 패키지를 게시합니다
  • 버전이 레지스트리에 없는 최신 커밋으로 패키지를 게시합니다
  • 이전 커밋에서 업데이트된 버전이 없는 ‘canary’ 릴리즈의 패키지 및 해당 종속항목을 게시합니다

Lerna 는 개인용으로 표시된 패키지를 게시하지 않습니다.

// package.json
{
  "name": "root",
  "private": true,
  "devDependencies": {
    "lerna": "^3.22.0"
  },
}

모든 게시 작업중에 루트 및 패키지별로 적절한 수명주기 스크립트가 호출됩니다. (--ignore-scripts 옵션으로 비활성화되지 않은 경우)

범위가 지정된 패키지, 사용자 지정 레지스트리 및 사용자 지정 dist 태그 게시에 대한 자세한 내용은 Lerna 패키지 단위 구성을 확인하세요.


STEP2: Version 설정 하기

lerna publish 를 실행하면 Lerna 는 해당 소스의 변경부분을 확인하고 새로운 버전을 설정할 수 있는 선택지를 제공합니다.

lerna notice cli v3.22.0
lerna info current version 0.0.0
lerna info Assuming all packages changed
? Select a new version (currently 0.0.0) (Use arrow keys)
❯ Patch (0.0.1)
  Minor (0.1.0)
  Major (1.0.0)
  Prepatch (0.0.1-alpha.0)
  Preminor (0.1.0-alpha.0)
  Premajor (1.0.0-alpha.0)
  Custom Prerelease
  Custom Version

사용자는 자신의 패키지의 버전을 major, minor, patch version 으로 설정할 수 있습니다.

? Select a new version (currently 0.0.0) Patch (0.0.1)

Changes:
 - my-package: 0.0.0 => 0.0.1

? Are you sure you want to publish these packages? (ynH)
  y) Yes
  n) No
  h) Help, list all options
  Answer:

patch 버전을 선택하고 Enter를 누르면 위와 같이 my-pachage를 0.0.0 버전에서 0.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 info Verifying npm credentials
lerna http fetch GET 401 https://registry.npmjs.org/-/npm/v1/user 914ms
401 Unauthorized - GET https://registry.npmjs.org/-/npm/v1/user
lerna ERR! EWHOAMI Authentication error. Use `npm whoami` to troubleshoot.
user my-lerna %

성공적으로 버전을 설정한 패키지가 사용자의 git 저장소에 저장되었습니다.
npm 저장소의 사용자 로그인이 되어있지 않으므로 현재는 npm 모듈발행 실패의 결과가 출력됩니다.



추가정보: Per-Package Configuration

특정 상황에서 lerna publish 의 동작을 변경하는 특수 publishConfig 를 사용하여 leaf 패키지를 구성할 수 있습니다.

publishConfig.access

벙위가 있는 패키지를 게시하려면 (예: @fe-toolkit/utils) 액세스를 설정해야 합니다.

// lenar.json
"publishConfig": {
  "access": "public"
}
  • 범위가 없는 패키지에 이 필드를 설정하면 실패합니다.
  • 범위가 지정된 패키지를 비공개로 유지하려면 (예: ‘restricted’), 이 값을 설정할 필요가 없습니다.
  • 이것은 ‘private’ 설정과 동일하지 않습니다. (leaf 패키지에서 private: true 가 설정되면 해당 패키지는 어떠한 상황에서도 게시되지 않습니다.)

publishConfig.registry

레지스트리를 설정하여 패키지별로 레지스트리를 Customize(사용자 정의) 할 수 있습니다.

// lenar.json
"publishConfig": {
  "registry": "http://user-registry.com/"
}


publishConfig.directory

아래 비표준 필드를 사용하면 –contents 와 마찬가지로 게시 된 하위 디렉토리를 패키지별로 Customize(사용자 정의) 할 수 있습니다.

// lenar.json
"publishConfig": {
  "directory": "dist"
}




마무리하며..

지금까지 간략하게 Lerna 설치 및 패키지 생성, 의존성 설치, 그리고 버전관리 및 발행에 대해서 알아보았습니다. 물론 Lerna 공식 페이지에서 제공하는 다양한 옵션과 Config 설정에 대해서는 다루지 않았지만, 1편에서 3편까지의 STEP 별 과정만으로도 충분히 사용자의 패키지를 쉽게 관리할 수 있습니다.

좀더 자세한 사용방법을 알고 싶으시면 Lerna 공식 페이지에 방문하셔서 다양한 Options 및 설정에대한 설명을 확인해보세요.

Tags:

Categories:

Updated:

 

 

Leave a comment