2
2

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でdependenciesのみをインストールする際の注意点

Last updated at Posted at 2021-12-03

結論

node_modulesの中身を確実にdependenciesのみにしたい場合

  • npm v6 の場合 → npm prune --production
  • npm v7 ~ の場合 → npm i --production

→ npm v6の場合、npm i --production では、インストール済みのdevDependenciesのパッケージが削除される訳ではないことに注意

経緯

AWS Lambdaのレイヤーとしてアップロードしたいパッケージ群があり、以下のような流れでインストールしたい状況がありました。

  1. devDependenciesのパッケージも含めて全てインストールし、関数をビルドする。
  2. node_modules内を、実行時に必要なdependenciesのパッケージのみにしてzip化する。

この時、2の段階で npm i --production を行なった場合、npmがv6かv7以降かによって結果が異なるようです。

npm v6の場合

v6で npm i --production を行うと、新たにインストールされるパッケージはdependenciesに記載のもののみになりますが、既にインストールされているdevDependenciesのパッケージが削除される訳ではないようです。

既にインストールされたdevDependenciesのパッケージを削除したい場合は、 npm prune --production というコマンドが利用できます。

コマンドの説明では、devDependenciesのパッケージを削除するとありますが、dependenciesのパッケージがインストールされていない場合はそのインストールも同時に行ってくれるようです。

したがって、node_modulesの中身を確実にdependenciesのパッケージのみにしたい場合は、 npm prune --production を実行するだけで十分なようです。

npm v7以降の場合

v7, v8では、npm i --production を行うと、dependenciesのパッケージのみインストールされ、既にインストールされたdevDependenciesのパッケージの削除まで行ってくれるようです。

これは実質的に npm prune --production と同じ挙動になっているようです。

所感

dependenciesのみをインストールしたいがインストール済みのdevDependenciesは残しておきたいというケースは考えにくいため、やはりv7以降の挙動が便利だと思いました。

参考

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?