調べた経緯
自分でnpmパッケージを作ったので、パッケージのバージョン番号を更新する場面があって初めて$ npm version
というコマンドを使うようになりました。
$ npm version
コマンド自体は、引数に応じてpackage.json
のバージョン番号(version
要素)の値を更新・Gitコミットし、そのバージョン番号の名前を持ったGitのタグを作成するコマンドです。
しかし、公式ドキュメントに詳細が書いてあるものの、引数の種類が多く、何が起こるのかパッと見ただけでは自分にはわからなかったので、ローカルで各コマンドを実行しつつまとめました。
引数について
公式ドキュメント上にはnpm version
コマンドの引数は下記の9個があります。
<newversion>
major
minor
patch
premajor
preminor
prepatch
prerelease
from-git
大きく分けるとfrom-git
とfrom-git
以外の2種類に分けられるそうです。
from-git
名前の通り、git上で設定された最新のタグを読んで、そのタグのバージョン番号をnpmパッケージのバージョンとして設定するコマンド。
from-git
以外
コマンド実行時点でパッケージに設定されているバージョン番号から新しく設定するコマンド。
<newversion>
となっている部分は、 from-git
以外のものを指すようです。
<newversion> = major, minor, patch, premajor, prepatch, prerelease
というようなイメージのようです。
(もし違っていたらすみません、その際にはツッコミをお願いします)
<newversion>
対応表
<newversion>
(from-git
以外)のコマンドを実行する時のパッケージのバージョンが1.0.0
であった場合、下記の表の通りになります。
コマンド | 実行後のバージョン番号 |
---|---|
$ npm version major | 2.0.0 |
$ npm version minor | 1.1.0 |
$ npm version patch | 1.0.1 |
$ npm version premajor | 2.0.0-0 |
$ npm version preminor | 1.1.0-0 |
$ npm version prepatch | 1.0.1-0 |
$ npm version prerelease | 1.0.1-0 |
$ npm version prerelease
について
上記の表にまとめた時に、prepatch
とprerelease
がなぜ同じバージョンになるのかがわかりませんでした。
ですが、prerelease
について検索したところヒットした、Stack Overflowの「What is the convention for versioning npm packages prior to 1.0.0?」というスレッドで、
prerelease
Lets say your package starts at version 0.0.0
npm version prerelease => 0.0.1-0
npm version prerelease => 0.0.1-1
Basically just bumps the number after the dash
という記述があり、prerelease
コマンドは、ダッシュの後の番号(プレリリース版としてのバージョン番号)を上げる時に使用するコマンドとようやく理解できました。
コマンド実行時のバージョン番号が1.0.1-0
であった時に、再度実行したときには下記の表のように挙動が異なることを確認できました。
コマンド | 実行後のバージョン番号 |
---|---|
$ npm version prepatch | 1.0.2-0 |
$ npm version prerelease | 1.0.1-1 |