237

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

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

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

4

14 に答える 14

206

正しい答え

これを行うには、単に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、タグの編集、作成、サーバーへのプッシュを行うことができます。

于 2012-11-01T14:14:22.253 に答える
113

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 を使用している場合、それが最も簡単な解決策かもしれません。

于 2013-03-07T07:24:41.523 に答える
83

これは、私が自分のプロジェクトで通常行っていることです。

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にモジュールを公開します。

これが理にかなっていることを願っています...

メルク。

于 2013-03-07T04:59:28.513 に答える
39

さらに、バージョン バンプが必要で、タグや新しいコミットが必要ない場合は、フラグnpm versionを使用できます。--no-git-tag-version

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

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

于 2016-12-15T09:23:05.540 に答える
38

より最新のアプローチを提供します。

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を参照してください

于 2016-09-08T17:29:18.973 に答える
12

この質問が得た答えを明確にしたいと思います。

問題に適切に取り組み、解決策を提供するいくつかの答えがここにあるとはいえ、それらは正しいものではありません。この質問に対する正しい答えは、使用することです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正解の理由は次のとおりです。

  1. ユーザーが を使用しているフォルダ構造を使用している場合、package.jsonを使用しているnpm場合、 にnpmアクセスできますnpm scripts
  2. アクセスできる場合はnpm scriptsnpm versionコマンドにアクセスできます。
  3. このコマンドを使用すると、コンピューターや CD/CI パイプに何もインストールする必要がなくなり、長期的にはプロジェクトの保守作業が軽減され、セットアップが容易になります。

他のツールが提案されている他の回答は正しくありません。

gulp-bump動作しますが、長期的に問題を引き起こす可能性のある別の追加パッケージが必要です (私の回答のポイント 3)

grunt-bump動作しますが、長期的に問題を引き起こす可能性のある別の追加パッケージが必要です (私の回答のポイント 3)

于 2019-02-20T14:04:15.840 に答える
4

念のため、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

Git リポジトリ

于 2020-08-19T19:18:27.950 に答える