小さなリリースを行ってタグを付ける前に、新しいバージョンのプログラムを反映するように package.json を更新したいと思います。
package.json
ファイルを自動的に編集する方法はありますか?
ヘルプを使用しgit pre-release hook
ますか?
正しい答え
これを行うには、単にnpm version patch
=)
私の古い答え
pre-release
もともとフックはありませんgit
。少なくとも、man githooks
それを示していません。
git-extra
たとえば、 (https://github.com/visionmedia/git-extras)を使用している場合、 https://github.com/visionmedia/ で確認できるように、それによって実装されているフックをpre-release
使用できます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 will execute を使用できpath/to/pre-release.sh 0.4
ます。スクリプトはpackage.json
、タグの編集、作成、サーバーへのプッシュを行うことができます。
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
とにかく grunt を使用している場合、それが最も簡単な解決策かもしれません。
これは、私が自分のプロジェクトで通常行っていることです。
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 commit
にgit push
、そして最後npm publish
にモジュールを公開します。
これが理にかなっていることを願っています...
メルク。
さらに、バージョン バンプが必要で、タグや新しいコミットが必要ない場合は、フラグnpm version
を使用できます。--no-git-tag-version
npm --no-git-tag-version version patch
より最新のアプローチを提供します。
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"
どちらが:
... テストを実行 ...
次のマイナー バージョンに変更package.json
します (例: 1.8.1 から 1.9.0)。
変更をプッシュする
新しい git タグ リリースを作成し、
npm パッケージを公開します。
--force
誰がボスかを示すことです!冗談はさておき、https://github.com/npm/npm/issues/8620を参照してください
この質問が得た答えを明確にしたいと思います。
問題に適切に取り組み、解決策を提供するいくつかの答えがここにあるとはいえ、それらは正しいものではありません。この質問に対する正しい答えは、使用することですnpm version
ファイル package.json を自動的に編集する方法はありますか?
はい、これを実現するためにできることはnpm version
、必要に応じてコマンドを実行することです。詳細については、こちら npm versionを参照しnpm version patch
てくださいpackage.json
。
git プレリリース フックを使用すると役立ちますか?
必要に応じてプレリリース フックでコマンドを実行するように構成できますnpm version
が、それが CD/CI パイプで必要かどうかによって異なりますが、npm version
コマンドがないと、git pre-release
フックは「簡単に」何もできません。とともにpackage.json
npm version
正解の理由は次のとおりです。
package.json
を使用しているnpm
場合、 にnpm
アクセスできますnpm scripts
。npm scripts
、npm version
コマンドにアクセスできます。他のツールが提案されている他の回答は正しくありません。
gulp-bump
動作しますが、長期的に問題を引き起こす可能性のある別の追加パッケージが必要です (私の回答のポイント 3)
grunt-bump
動作しますが、長期的に問題を引き起こす可能性のある別の追加パッケージが必要です (私の回答のポイント 3)
念のため、npm パッケージリンクを使用してこれを行いたい場合semver
let fs = require('fs');
let semver = require('semver');
if (fs.existsSync('./package.json')) {
var package = require('./package.json');
let currentVersion = package.version;
let type = process.argv[2];
if (!['major', 'minor', 'patch'].includes(type)) {
type = 'patch';
}
let newVersion = semver.inc(package.version, type);
package.version = newVersion;
fs.writeFileSync('./package.json', JSON.stringify(package, null, 2));
console.log('Version updated', currentVersion, '=>', newVersion);
}
package.json
次のように見えるはずです、
{
"name": "versioning",
"version": "0.0.0",
"description": "Update version in package.json using npm script",
"main": "version.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"version": "node version.js"
},
"author": "Bhadresh Arya",
"license": "ISC",
"dependencies": {
"semver": "^7.3.2"
}
}
major
, minor
,patch
引数を で渡すだけnpm run version
です。デフォルトは になりますpatch
。
例:
npm run version
またはnpm run verison patch
またはnpm run verison minor
またはnpm run version major