小さなリリースを行ってタグを付ける前に、新しいバージョンのプログラムを反映するように 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.4which 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