올바른 방법으로 npm 배포 태그 사용

4804 단어 npmpublishdist
지난 몇 주 동안 직장에서 npm 패키지 배포 태그에 대해 많은 것을 배웠고 이 블로그 게시물에서 배운 내용을 공유하려고 생각했습니다.

npm에 패키지를 게시하는 것은 매우 간단합니다. npmjs.com의 계정과 package.json 파일이 포함된 프로젝트만 있으면 됩니다. 그런 다음 몇 가지 간단한 명령으로 패키지를 npm에 게시할 수 있습니다.

npm login
npm publish


위의 명령은 프로젝트를 압축하고 npm 레지스트리에 배포합니다. 또한 npm 패키지의 latest 배포 태그가 package.json 파일에 정의된 패키지 버전을 가리킵니다.

// Example package.json file
{
  "version": "0.1.0"
}


But what is a distribution tag?



이것이 의미하는 바는 패키지 사용자가 npm i my-awesome-package 또는 npm i my-awesome-package@latest로 패키지를 설치할 때 위의 예에서 버전0.1.0을 설치한다는 것입니다. 따라서 npm publishversionpackage.json로 설정된 프로젝트에서 0.1.0를 실행할 때 latest 패키지 배포 태그는 패키지의 0.1.0 버전에 대한 별칭입니다.

그러나 패키지 버전을 npm에 게시하고 싶지만 latest 별칭이 해당 버전을 가리키지 않게 하려면 어떻게 해야 합니까? 예를 들어 릴리스 후보 버전(예: 1.0.0-rc.0 )을 게시하여 사용자가 (npm i [email protected] 포함) 다운로드하고 새 패치/부/주 버전을 게시하기 전에 예정된 변경 사항을 테스트할 수 있습니다. 패키지. 그러나 사람들이 찾고 다운로드할 수 있도록 npmjs.com에서 릴리스 후보를 사용할 수 있기를 원하지만 사용자가 패키지를 업그레이드할 때 이 버전이 표시되는 것을 원하지는 않습니다(예: npm outdatednpm upgrade ). 사용자가 npm i my-awesome-package로 설치할 때도 마찬가지입니다.

답은 docs of npm publish 에 있습니다. 실행 중npm publish은 실행 중npm publish --tag latest과 동일합니다. 이것이 패키지 버전이 항상 latest 배포 태그에 매핑되는 이유입니다. 단순히 다른 배포 태그를 제공하여 이를 쉽게 재정의할 수 있습니다. 내가 저지른 실수(distribution tags docs를 제대로 읽지 않은 것에 대한 유죄)는 "좋아, 내 패키지 버전을 태그로 전달하면 latest가 그것을 가리키지 않을 것"이라고 생각한 것입니다. 그래서 시도했습니다.

npm publish --tag 1.0.0-rc.0


오류 메시지를 받기 위해서만:

npm ERR! Tag name must not be a valid SemVer range


the docs으로 돌아가서 문제를 더 잘 이해하는 데 도움이 되었습니다. 그러나 실제로 문제를 해결한 것은 바로 이 제품StackOverflow answer이었습니다.

Package distribution tags are not meant to be version numbers. They are aliases to version numbers. They are words like latest, stable, next, rc, experimental, etc.



따라서 latest 별칭을 지정하지 않고 릴리스 후보를 npm에 게시하는 올바른 방법은 다음을 실행하는 것입니다.

npm publish --tag rc


버전 관리 및 게시 워크플로우



전반적으로 이것은 내 패키지의 버전을 지정하고 npm에 게시하기 위해 따르는 워크플로우입니다.

1단계: 패키지 버전을 npm version로 범프하여 git commit 및 git 태그를 생성합니다(위에서 수행한 패키지 배포 태그와 혼동하지 말 것).

npm version patch # for a patch version
npm version minor # for a minor version
npm version major # for a major version
npm version prerelease --pre-id rc # for a release candidate version


2단계: GitHub에서 태그를 푸시할 때 실행되는 GitHub 작업 워크플로가 있습니다. 작업 흐름:
  • 은 푸시된 태그의 이름을 읽습니다
  • .
  • 은 배포 태그를 정의합니다(태그가 패턴latest과 일치하는 경우 X.Y.Z 또는 패턴rc과 일치하는 경우 X.Y.Z-rcN)
  • 달리다 npm publish --tag [latest|rc]

  • 3단계: GitHub에서 생성된 태그를 푸시하여 워크플로를 트리거합니다.

    4단계 : 이익 ✅



    머리 속을 정리하는 데 도움이 된 것은 명령npm view이었습니다. 이를 실행하여 npm에 게시된 모든 패키지를 검사할 수 있습니다. 예를 들어 패키지의 배포 태그를 검사하는 데 사용할 수 있습니다.

    $ npm view web3 dist-tags
    { latest: '1.7.1', next: '2.0.0-alpha.1', rc: '1.7.2-rc.0' }
    

    좋은 웹페이지 즐겨찾기