0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

npmパッケージのバージョン指定について

Posted at

恥ずかしながらちゃんと理解してなかったので調べました

package.jsonのバージョン指定

package.json
"dependencies": {
    "express": "~4.16.1",
    "mongodb": "^5.0.1",
}

このチルダ(~)とキャレット(^)の違いって何よ。。。

こういうこと

チルダ ~4.16.1は「4.16.0 <= インストールバージョン < 4.17.0」ということ
キャレット^4.16.1は「4.0.0 <= インストールバージョン < 5.0.0」ということ

package-lock.jsonとの関係性

package.jsonで指定したバージョンはnpm installを実行したタイミングでインストールされるバージョンが異なる可能性があります。
また、package.jsonのインストール対象がさらに別のnpmモジュールに依存していた場合、その依存モジュールのインストールされるバージョンまで異なる可能性があります。

package-lock.jsonとは、package.jsonを元に実際にインストールされたnpmパッケージのバージョンと、依存関係を管理しているファイルとなります。
package-lock.jsonがあれば、チルダ、キャレットに関わらずpackage-lock.jsonに記述されたバージョンをインストールするようになります。
そのため、チーム開発をしている場合、人によって、npm installを実行するタイミングで微妙にバージョンが異なります。というのはなくなります。
リリースも同様ですね。リリースするたびに微妙にインストールされるnpmパッケージが異なります。ってのは普通に嫌ですね。

また、優先度ですが下記のようです。
 ①pakcage.jsonとpackage-lock.jsonに差がある → package.jsonに従う(あるパッケージをバージョンアップしたときなど)
 ②package.jsonとpackage-lock.jsonに差がない → pakcage-lock.jsonに従う(通常時はこれですかね)
 ③package-lock.jsonがない → package.jsonに従う。package-lock.jsonは新規で作成される(最初にnpm installするとき)
 ④package.jsonがない → エラー(まあ、当たり前ですが、、、気になったので試してみました)

いままで超いい加減で、うまくいかなかったら一回削除してnpm installしなおせばうまくいくやつという謎の認識でしたが、
更新されたpackage-lock.json普通にコミットしてたな。。。気を付けます。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?