package.json 버전을 자동으로 업데이트


183

작은 릴리스를 수행하고 태그를 지정하기 전에 새 버전의 프로그램을 반영하도록 package.json을 업데이트하고 싶습니다.

파일을 package.json자동으로 편집하는 방법이 있습니까?

사용겠습니까 git pre-release hook도움을?


1
package.json을 편집하고 커밋 한 다음 태그를 지정하는 쉘 스크립트를 작성하지 않는 이유는 무엇입니까?
gustavotkg

예, 시험판 후크가 해당 스크립트를 올바르게 호출합니까?
tUrG0n

답변:


94

npm version아마 정답 일 것입니다. 대안을 제공하기 위해 grunt-bump 권장 합니다. 그것은 angular.js의 사람 중 하나에 의해 유지됩니다.

용법:

grunt bump
>> Version bumped to 0.0.2

grunt bump:patch
>> Version bumped to 0.0.3

grunt bump:minor
>> Version bumped to 0.1.0

grunt bump
>> Version bumped to 0.1.1

grunt bump:major
>> Version bumped to 1.0.0

어쨌든 grunt를 사용하는 경우 가장 간단한 해결책 일 수 있습니다.


12
그리고 gulpjs를 사용 한다면 : gulp -bump :)
GabLeRoux

: 나는 하나가 급습에 ... 등 NPM을 범프 이에 대한 비크, 정자를 코딩 github.com/Wildhoney/Vik
Wildhoney

8
npm에이 기능이 내장되어있을 때 왜 외부 라이브러리를 사용합니까?
linuxdan

8
이것들을 사용하는 것의 이점은 무엇입니까 npm version?
Steve Bennett

3
@ConAntonakos 예. 같은 것을 시도하십시오 npm --no-git-tag-version version patch.
Tong Shen

165

올바른 대답

그렇게하려면 npm version patch=)

나의 옛 대답

pre-release원래 에는 후크 가 없습니다 git. 적어도 man githooks표시하지 않습니다.

당신이 사용하는 경우 git-extra( https://github.com/visionmedia/git-extras ), 예를 들어, 당신은 사용할 수 있습니다 pre-release당신은에서 볼 수 있듯이, 그것에 의해 구현되는 후크를 https://github.com/visionmedia/ git-extras / blob / master / bin / git-release . .git/hook/pre-release.sh파일을 편집 하는 실행 파일 만 필요 package.json합니다. 커밋, 푸시 및 태깅은 git release명령에 의해 수행됩니다 .

에 대한 확장명을 사용하지 않는 경우 git쉘 스크립트를 작성하고 (이름을 지정 함 git-release.sh) git release다음과 같이 별명을 지정할 수 있습니다 .

git config --global alias.release '!sh path/to/pre-release.sh $1'

git release 0.4를 실행할 것보다을 사용할 수 있습니다 path/to/pre-release.sh 0.4. 스크립트는 package.json태그를 편집 하여 서버로 푸시 할 수 있습니다.


스크립트의 모양에 대한 코드 스 니펫을 공유 할 수 있습니까? : D
tUrG0n


나는 실제로 visionmedia의 git-extra repo를 사용합니다. 그러나 git release그에 따라 package.json을 업데이트하지 않습니다 ... github.com/visionmedia/git-extras/issues/150 : D
tUrG0n

그래서, 단지 만들 .git/hooks/pre-release.sh포함 : echo -e "{\n\"version\": "$1"\n}" > package.json및 사용해보십시오git release $version
gustavotkg

5
로 댓글 여기 npm version patch 거나 npm version 0.3.1 그것을 해결합니다! 이에 따라 답변을 업데이트 할 수 있습니까? 타이 !!
tUrG0n

75

이것이 일반적으로 프로젝트에서 수행하는 작업입니다.

npm version patch
git add *;
git commit -m "Commit message"
git push
npm publish

첫 번째 줄 npm version patch은에서 패치 버전을 1 (xx1 ~ xx2) 증가시킵니다 package.json. 그런 다음 package.json수정 된 시점을 포함하여 모든 파일을 추가합니다 . 그런 다음 평소 git commitgit push, 마지막 npm publish으로 모듈을 게시합니다.

이것이 의미가 있기를 바랍니다 ...

머서.


9
내가 알 수 npm version patch있는 한, 커밋 자체를 수행합니다. 그러나 태그를 github에 푸시하려면을해야한다고 생각합니다 git push --tags.
ChrisV

@ChrisV는 정확 npm version patch합니다. 버전 번호가 충돌 하고 즉시 변경 사항이 적용됩니다.
Dan Esparza

2
@DanEsparza 이것은 설정 일 수 있습니다. npm version patch나를 위해 아무것도 저 지르지 않습니다.
Mordred

@Mordred Hmmm ... 아마도. npm 구성 문서에서 그것에 대해 아무것도 보지 못했지만 경로에 git이없는 것일 수 있습니까?
Dan Esparza

@DanEsparza git은 내가 실행하는 것과 동일한 폴더에서 커밋 할 때 분명히 경로에 있습니다 npm version.
Mordred

29

보다 최신의 접근 방식을 제공합니다.

package.json

  "scripts": {
    "eslint": "eslint index.js",
    "pretest": "npm install",
    "test": "npm run eslint",
    "preversion": "npm run test",
    "version": "",
    "postversion": "git push && git push --tags && npm publish"
  }

그런 다음 실행하십시오.

npm version minor --force -m "Some message to commit"

어느 것 :

  1. ... 테스트 실행 ...

  2. package.json다음 부 버전으로 변경하십시오 (예 : 1.8.1-1.9.0)

  3. 당신의 변화를 밀어

  4. 새로운 자식 태그 릴리스를 만들고

  5. npm 패키지를 게시하십시오.

--force누가 보스인지 보여줘야합니다! 농담 옆으로 https://github.com/npm/npm/issues/8620 참조


3
다음과 같이 스크립트를 추가 할 수 있습니다. "deploy-minor": "npm version minor --force -m \"version %s\""기억해야 할 것은 npm run deploy-minor:)
Kristofor Carle

23

또한 버전 범프를 원하지만 태그 또는 새로운 커밋을 원하지 않는 경우 플래그를 npm version사용할 수 있습니다 --no-git-tag-version.

npm --no-git-tag-version version patch

https://docs.npmjs.com/cli/version


17

원사를 사용하는 경우 사용할 수 있습니다

yarn version --patch

이것은 package.jsonpatch로 버전을 증가 (0.0.x)시키고 커밋하고 형식으로 태그 지정합니다v0.0.0

마찬가지로 당신이 사용하여 사소한 또는 주요 버전 범프 수 있습니다 --minor또는--major

자식으로 밀 때 태그를 밀어야합니다. --follow-tags

git push --follow-tags

스크립트를 만들 수도 있습니다

    "release-it": "yarn version --patch && git push --follow-tags"

간단히 입력하여 실행하십시오. yarn release-it


11

나는 huskygit-branch-is를 사용하고 있습니다 :

허스키 v1 + 기준 :

// package.json
{
  "husky": {
    "hooks": {
      "post-merge": "(git-branch-is master && npm version minor || 
  (git-branch-is dev && npm --no-git-tag-version version patch)",
    }
  }
}

허스키 V1 이전 :

"scripts": {
  ...
  "postmerge": "(git-branch-is master && npm version minor || 
  (git-branch-is dev && npm --no-git-tag-version version patch)",
  ...
},

NPM 버전 에 대해서 더 읽어보세요.

웹팩 또는 Vue.js

webpack 또는 Vue.js를 사용하는 경우 자동 삽입 버전-Webpack 플러그인을 사용하여 UI에이를 표시 할 수 있습니다.

NUXT

에서 nuxt.config.js:

var WebpackAutoInject = require('webpack-auto-inject-version');

module.exports = {
  build: {
    plugins: [
      new WebpackAutoInject({
        // options
        // example:
        components: {
          InjectAsComment: false
        },
      }),
    ]
  },
}

template바닥 글에서 예를 들어 내부 :

<p> All rights reserved © 2018 [v[AIV]{version}[/AIV]]</p>

나는이 거친 옵션을 가장 좋아하지만 더 이상 작동하지 않는다고 생각합니다. 나는 'postmerge'가 존재하지 않는다고 생각합니다. "pre-push"가 아마도 가장 좋은 옵션 일 것입니다. 'git-branch-is'결과는 실제로 오류가 발생하여 기본적으로 전체 게시물을 충돌시키기 때문에 실제로 작동하지 않습니다 (마스터와 개발자 모두를 확인하기 때문에 그 중 하나에서 오류가 발생합니다)
Phil

@Phil 여전히을 사용할 수 postmerge있지만 이제는 구성 post-merge내부에 husky: {hooks:{}}있습니다. 어떤 문제가 git-branch-is있습니까?
Anima-t3d

실행하는 대신 오류가 발생합니다. 걱정하지 마라. 나는이 옵션을 계속 사용했다 : marketplace.visualstudio.com/…
Phil

1
@Phil에 감사합니다. 방금 업데이트 된 버전으로 시도했지만 오류가 없습니다. 아마도 병합 후 명령 자체에 문제가있을 수 있습니다.
Anima-t3d

5

이 질문에 대한 답변에 명확성을 추가하고 싶습니다.

여기에 문제를 올바르게 해결하고 해결책을 제시하는 몇 가지 대답이 있다고 생각했지만 올바른 대답은 아닙니다. 이 질문에 대한 정답은npm version

package.json 파일을 자동으로 편집하는 방법이 있습니까?

예, npm version필요한 경우 명령 을 실행하는 것입니다 . npm version 여기에서 자세한 내용을 읽을 수 있지만 기본 사용법은 버전 npm version patch에 3 자리 순서를 추가합니다 package.json(1.0. X )

git 시험판 후크를 사용하면 도움이됩니까?

npm version필요에 따라 시험판 후크 에서 명령 을 실행하도록 구성 할 수 있지만, 이것이 CD / CI 파이프에 필요하거나 없는지 여부에 따라 다르지만 npm version명령 없이 git pre-release후크는 "쉽게"수행 할 수 없습니다 이랑package.json

npm version정답 인 이유 는 다음과 같습니다.

  1. 사용자가 자신이있는 폴더 구조를 package.json사용중인 npm경우 사용중인 경우에 npm액세스 할 수 npm scripts있습니다.
  2. 그가 액세스 권한이 있으면 명령에 npm scripts액세스 할 수 npm version있습니다.
  3. 이 명령을 사용하면 컴퓨터 나 CD / CI 파이프에 더 이상 아무것도 설치할 필요가 없으므로 장기적으로 프로젝트의 유지 관리 노력이 줄어들고 설정에 도움이됩니다.

다른 도구가 제안 된 다른 답변이 잘못되었습니다.

gulp-bump 작동하지만 장기적으로 문제를 일으킬 수있는 다른 추가 패키지가 필요합니다 (내 답변의 포인트 3)

grunt-bump 작동하지만 장기적으로 문제를 일으킬 수있는 다른 추가 패키지가 필요합니다 (내 답변의 포인트 3)


2

먼저 버전 번호를 업그레이드하기위한 규칙을 이해해야합니다. 시맨틱 버전 에 대한 자세한 내용은 여기를 참조하십시오.

각 버전에는 xyz 버전이 있으며 여기에 아래와 같이 다른 목적으로 정의됩니다.

  1. x-major, 주요 변경 사항이 있고 변경 사항이 크게 일치하지 않을 때이 값이 증가합니다.
  2. y-사소한 기능입니다. 새로운 기능이나 향상된 기능이있을 때이 값을 올리십시오.
  3. z-패치. 이전 버전에서 버그를 수정했거나 변경 사항을 되돌릴 때 업데이트됩니다.

스크립트를 실행하기 위해 package.json에서 스크립트를 정의 할 수 있습니다.

"script": {
    "buildmajor": "npm version major && ng build --prod",
    "buildminor": "npm version minor && ng build --prod",
    "buildpatch": "npm version patch && ng build --prod"
}

터미널에서 다음과 같은 요구 사항에 따라 npm 실행하면됩니다.

npm run buildpatch

git repo에서 실행하면 기본 git-tag-version이 true이고 원하지 않으면 스크립트에 아래 명령을 추가 할 수 있습니다.

--no-git-tag-version

예를 들어 : "npm --no-git-tag-version version major && ng build --prod"


0

변경 유형이라고 알려진 커밋 메시지의 태그를 기반으로 자동 의미 버전 관리를 수행 할 수 있는 도구 를 만들었습니다 . 이는 시맨틱 버전 관리 사양과 함께 앵귤러 커밋 메시지 컨벤션을 밀접하게 따릅니다.

이 도구를 사용하여 npm CLI를 사용하여 package.json의 버전을 자동으로 변경할 수 있습니다 ( 여기 에 설명되어 있음 ).

또한 이러한 커밋에서 변경 로그를 만들 수 있으며 변경 유형에 따라 커밋을 만드는 메뉴 (커밋 메시지의 맞춤법 검사기 포함)도 있습니다. 나는 그것을 확인하고 그것을 읽을 수있는 모든 것을보기 위해 문서를 읽는 것이 좋습니다.

시맨틱 버전 관리를 자동화하기 위해 CICD Pipeline에 필요한 요구 사항을 찾을 수 없기 때문에 도구를 작성했습니다. 차라리 실제 변경 사항이 버전보다 무엇이고 내 도구가 하루를 절약하는 데 중점을 둡니다.

도구의 이론적 근거에 대한 자세한 내용은 다음을 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.