調べた経緯
自分でnpmパッケージを作ったので、パッケージのバージョン番号を更新する場面があって初めて$ npm versionというコマンドを使うようになりました。
$ npm versionコマンド自体は、引数に応じてpackage.jsonのバージョン番号(version要素)の値を更新・Gitコミットし、そのバージョン番号の名前を持ったGitのタグを作成するコマンドです。
しかし、公式ドキュメントに詳細が書いてあるものの、引数の種類が多く、何が起こるのかパッと見ただけでは自分にはわからなかったので、ローカルで各コマンドを実行しつつまとめました。
引数について
公式ドキュメント上にはnpm versionコマンドの引数は下記の9個があります。
<newversion>majorminorpatchpremajorpreminorprepatchprereleasefrom-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 |