質問: npmパッケージのバージョン管理について相談させてください。 --- とあるウェブサービスを、npmパッケージを使用して開発するとします。 プロジェクトにはエンジニアA/Bの2名がアサインされており、Aがこのプロジェクトのテクニカルディレクターとします。 プロジェクト開始時に必要なnpmパッケージX(v2.0.0)をインストール後、2名で開発を進めて行きます。 > > package.json に記載されるXのバージョン `^2.0.0` > > package-lock.json に記載されるXのバージョン `2.0.0` > > > 開発開始から1ヶ月立ったある日、プロジェクト開始時に入れたパッケージXが`2.1.0`へバージョンアップしたので、エンジニアAはそのパッケージをバージョンアップしたいと考えました。 エンジニアAはpackage.jsonにあるパッケージXのバージョンを`^2.1.0`に書き換え、`npm install`を実行し、コミットしました。 > > package.json に記載されるバージョン `^2.1.0` > > package-lock.json に記載されるバージョン `2.1.0` > > > エンジニアBは、上記2ファイルをどこかのタイミングでpullしますが、エンジニアBのローカルのnode_modulesにあるパッケージXはバージョンが`2.0.0`のままであると思います。 ### 質問 この例において、package-lock.jsonに記載されているバージョンとローカルのnode_modulesにインストールされているバージョンが違うことを機械的にエンジニアBにアナウンス、およびアップデートさせる良い手段はありますでしょうか。 ### 一応考えてみたがしっくりこない解決策 **1. 開発スタートコマンド(例えば:`npm start`)時に、必ず`npm install`するようにnpm-scriptsを組む** →これは少々荒業な気がしています。 **2. git-hookのpost-mergeでpackage-lock.jsonの更新を検知したら`npm install`** https://davidwalsh.name/git-hook-npm-install-package-json-modified ここに紹介されている方法です。今のところベストアンサーです。 ### 前提 * コードのバージョン管理にはgitを使用 * npmバージョンはv5+ * node_modulesディレクトリは`.gitignore`に追加されている
回答: 質問の内容にpullやコミットと記載がされてるので、恐らくGitなどで管理されている前提でお話します。 package.jsonがGitで管理されていれば、npm install後にnpm startで問題ないと思います。 ご質問に答えられる様な解決策を明示できなくて申し訳ないです。 ただ、毎度npm installでは遅いと思うので、yarnを導入されてみたらいかがでしょうか? (yarnの記事を添付しました。既に導入済みでしたら無視してください) https://qiita.com/0829/items/ec5271c06f8ff0633dd3 https://qiita.com/tonkotsuboy_com/items/0242928ab32794d11f76