はじめに
npmインストールをちゃんと理解せずに使っていたので、改めてまとめようと思います。
npm installとは
npm installはpackage.jsonに記載されているパッケージをnode_modulesディレクトリにインストールするコマンドである。
-
npm install {パッケージ名}-
package.jsonにない、新規のパッケージをインストールし、package.jsonに自動で記載される
-
-
npm install-
package.jsonにある、パッケージをインストールする - 同等のコマンドで
npm ciもある-
package.jsonの依存関係の解決を行わず、常にpackage-lock.jsonを見て依存パッケージをダウンロードしnode_modulesの洗い替えを行う -
package.jsonを完全に無視するというわけではなく、package-lock.jsonと依存バージョン指定が食い違っているとエラーにする
-
-
npm installにはグローバルインストールとローカルインストールの2種類がある。
- グローバルインストール
- コマンド
npm install -g
- インストール場所
-
npmがインストールされている場所のnode_modules内
-
- 使い時
- 自PCからいつでも使いたいパッケージとか
- コマンド
- ローカルインストール
- コマンド
npm install
- インストール場所
- カレントディレクトリの
node_modules内
- カレントディレクトリの
- 使い時
- 基本的にはこっち
-
git cloneしてきたときとか、デプロイするときとか -
node_modulesディレクトリは.gitignoreに記載し、リポジトリにはプッシュしないので、開発者はローカル端末でgit cloneした時に都度実行する必要がある
- 補足
-
ーDオプション- 新規パッケージをインストールする際、
package.jsonのdependencesには記載されず、devDependenciesのみに記載されるようにする -
—productionオプションを使うことで、package.jsonのdependencesに記載されているパッケージのみをインストールできるので、-Dオプションを使ってインストールしたパッケージを本番環境でインストールする必要がなくなるので、効率的にパッケージをインストールでき、軽量になる
- 新規パッケージをインストールする際、
-
- コマンド
package.jsonとpackage-locke.jsonの違い
-
pckage.json- プロジェクトが依存するパッケージとそのバージョン範囲が定義されている
-
package-lock.json- 実際のインストールされたパッケージとそのサブ依存パッケージの厳密なバージョンとインストール場所が記載されている
- →これにより、どの開発者も同じパッケージバージョンをインストールできるようになり、ビルドの再現性を保証
食い違う原因
- 手動で
package.jsonを更新した後にpackage-lock.jsonを更新していない場合。 -
npm installを実行せずにpackage-lock.jsonを変更した場合。 -
npm ciではなくnpm installを複数回実行した場合。
発生する問題
- 開発環境・デプロイ環境の不一致: 異なる環境で異なるバージョンのパッケージがインストールされ、バグを引き起こす可能性がある。
- ビルドの失敗: 必要なパッケージが欠落していたり、互換性のないバージョンがインストールされたりすると、ビルドが失敗する。
- 予期しない動作: 依存パッケージのバージョンが異なることで、アプリケーションの動作が不安定になることがある。
参考
- グローバルインストールとローカルインストール
- -Dについて
- npm ciについて
- package.jsonとpackage-locke.jsonの違い