package.jsonのバージョンを自動的に更新する


183

小さなリリースをしてタグを付ける前に、package.jsonを更新して、プログラムの新しいバージョンを反映させたいと思います。

ファイルをpackage.json自動的に編集する方法はありますか?

git pre-release hookヘルプを使用しますか?


1
package.jsonを編集してコミットし、タグを付けるシェルスクリプトを作成しないのはなぜですか?
gustavotkg 2012年

そうですね、プレリリースフックはそのスクリプトを呼び出すのでしょうか。
tUrG0n

回答:


94

npm versionおそらく正しい答えです。代替案を提供するために、私はgrunt-bumpをお勧めします。これは、angular.jsのメンバーの1人が管理しています。

使用法:

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

とにかく、うなり声を使用している場合、それは最も簡単な解決策かもしれません。


12
そして、gulpjsを使用している場合gulp -bump :)
GabLeRoux

私はこのためにVikをコード化しました。これはnpmやBowerなどを一気にバンプします: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-extrahttps://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それよりも、whichを実行して使用できpath/to/pre-release.sh 0.4ます。スクリプトはを編集package.jsonしてタグを作成し、サーバーにプッシュできます。


スクリプトがどのように見えるかのコードスニペットを共有できますか?:D
tUrG0n

1
このリンクをチェックしてくださいgithub.com/visionmedia/git-extras/blob/master/bin/git-release
gustavotkg

私は実際にvisionmediaのgit-extraリポジトリを使用しています。しかし、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 を解決します!それに応じて回答を更新できますか?ty !!
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、モジュールを公開します。

これが理にかなっているといいのですが...

Merc。


9
私の知る限りnpm version patch、コミット自体は行います。ただし、タグをgithubにプッシュするには、も必要だと思いますgit push --tags
ChrisV、2015年

@ChrisVは正しいです- npm version patchバージョン番号
Dan Esparza

2
@DanEsparzaこれは設定の問題かもしれません。npm version patch私には何もしません。
Mordred

@Mordred Hmmm ...たぶん。それに関するnpm構成ドキュメントには何も表示されませんが、パスなどにgitがない可能性がありますか?
Dan Esparza 2015

@DanEsparza gitは間違いなくパスにありますnpm version。私が実行しているのとまったく同じフォルダーからコミットします。
Mordred、2015

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. 新しいgitタグリリースを作成し、

  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.jsonにより、パッチによってバージョンが増分され(0.0.x)、コミットされ、フォーマットでタグ付けされますv0.0.0

同様に、またはを使用して--minor、マイナーバージョンまたはメジャーバージョンをバンプできます。--major

gitにプッシュするときは、タグもプッシュするようにしてください。 --follow-tags

git push --follow-tags

そのためのスクリプトを作成することもできます

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

入力するだけで実行できます yarn release-it


11

私はハスキーgit-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バージョンの詳細を読む

Webpackまたは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'の結果は実際には機能しません。エラーが発生し、基本的に投稿全体がクラッシュします(masterとdevの両方をチェックしているため、そのうちの1つでエラーが発生します)
Phil

@Philは引き続き使用できますがpostmerge、現在は構成post-merge内にありhusky: {hooks:{}}ます。どのような問題がありますgit-branch-isか?
アニマt3d

実行するのではなく、エラーが発生します。私は、このオプションと一緒に行くことになったきた、けれども心配ありません:marketplace.visualstudio.com/...
フィル・

1
@Philフォローアップありがとうございます。更新されたバージョンで試したところ、エラーは発生しませんでした。おそらく、マージ後のコマンド自体に問題があります。
Anima-t3d

5

この質問で得られた回答に明確さを加えたいと思います。

ここで問題に適切に取り組み、解決策を提供しているいくつかの回答があると思っても、それらは正しいものではありません。この質問への正しい答えは使用することですnpm version

package.jsonファイルを自動的に編集する方法はありますか?

はい、あなたは何ができるか、これが起こる実行するようにするためにnpm version、あなたがより多くのそれについて読むことができ、必要なときにコマンドをここNPMバージョンが、ベースの使用量は次のようになりnpm version patch、それはあなたの上3桁目の順序を追加しpackage.jsonたバージョン(1.0。X

git pre-releaseフックを使用すると便利ですか?

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-メジャー、これに大きな変更があり、変更の大きな不一致が発生した場合。
  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

変更タイプと呼ばれる、コミットメッセージのタグに基づいてセマンティックバージョニングを自動化できるツールを作成しました。これは、セマンティックバージョニング仕様とともに、Angular Commit Message Conventionに厳密に従っています。

このツールを使用すると、npm CLIを使用してpackage.jsonのバージョンを自動的に変更できます(これについては、こちらで説明します)。

さらに、これらのコミットから変更ログを作成でき、変更タイプに基づいてコミットを作成するためのメニュー(コミットメッセージのスペルチェッカー付き)もあります。私はそれをチェックアウトし、それで達成できるすべてを確認するためにドキュメントを読むことを強くお勧めします。

セマンティックバージョニングを自動化するCICDパイプラインのニーズに適したものが見つからなかったため、ツールを作成しました。私はむしろバージョンがどうあるべきかというより実際の変更が何であるかに焦点を当てたいと思います、そしてそれは私のツールがその日を節約する場所です。

ツールの根拠の詳細について、こちらをご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.