質問: npm5.6.0でnode_moduleをインストールする際にデフォルトですとpackage.json内のライブラリのバージョンの先頭に^がつくと思います。^の意味は分かるのですがpackage-lock.jsonを開発者で共有した場合は^の意味はなくなるのでしょうか?またlockファイルを共有せずpackage.jsonから^の記述を削除した場合と違いはあるのでしょうか? 例 ``` "clean-css": "^4.1.9", ```
回答: package-lock.json ということで、アプリを開発しているのだと理解しました。 package.json に記述するのは、「利用するライブラリのバージョンに関する制約」です。 package-lock.json には、「package.json の制約に基づいて実際にインストールしたライブラリのバージョン」が記述されています。 アプリを開発していると、その最初のライブラリインストールのときに比べて、より新しいライブラリがリリースされることがあると思います。なので、そういった場合には `npm update` を実行して、利用ライブラリをアップデートすることになります。 さて、基本的に、アプリにおいては最新のライブラリを使った方がベターだと考えられますが、しかし新しすぎると、 breaking change にかち合って、アプリが壊れてしまうかもしれません。 なので、 package.json には、基本的に「最低限このバージョン以上で、しかしメジャーバージョンアップはまたがないで、何かいい感じにインストールしておきたい」といったような制約を与えることになります。 `^` は具体的にそれを実現する制約記述です。 これによって、上記 `npm update` 時に、「何かいい感じに利用ライブラリを更新して、それでもって package-lock.json を更新する」ができるようになります。