fjt7tdmi のノート

メモ帳みたいなもの

13 年ぶりの JavaScript (3)

nodejs を使っていると自動生成されるディレクトリ・ファイルがあるけど、どういうものかわかっていなかったので、調べてみた。

node_modules

nodejs を使っていると、プロジェクトディレクトリに生成されるディレクトリ。npm install で取得したファイルが置かれる場所。

公式ドキュメントはこちら。

https://docs.npmjs.com/cli/v6/configuring-npm/folders

どう考えてもバージョン管理から外すべき (.gitignore に追加すべき) ディレクトリだが、たまにそうでないプロジェクトに出くわす気がする。

なお npm install -g の場合は、プロジェクトのローカルディレクトリではなく、マシンで共通のディレクトリにファイルが置かれる。上記リンク先の説明によると、require で読みたいものはローカルに、コマンドラインで実行したいものはグローバルにインストールする、という想定らしい。この辺よくわからず適当にやっていた気がするので、気を付けよう。

package.json

nodejs を使っていると、プロジェクトディレクトリに生成されるファイル。プロジェクトの名前とか説明とかライセンスとか依存とか、色々な情報を書く。要するにプロジェクトファイルだと思っておけばよさそうだ。

公式ドキュメントはこちら。

https://docs.npmjs.com/cli/v6/configuring-npm/package-json

このファイルは、当然バージョン管理する。異論はない。

package-lock.json

nodejs を使っていると、プロジェクトディレクトリに生成されるファイル。package.json に名前も中身も似ており、いろんな人が混乱しているようだ。かくいう私も混乱している。だが、役割はかなり異なるようだ。

公式ドキュメントはこちら。

https://docs.npmjs.com/cli/v6/configuring-npm/package-locks

https://docs.npmjs.com/cli/v6/configuring-npm/package-lock-json

“This file is intended to be committed into source repositories” と書かれており、バージョン管理するのが正しい。

私がプロジェクトを触っていると、しばしば意図に反して更新される時があるのだが…そういうトラブルは無いわけではないものの、頻繁に発生するのはプロジェクト側に問題があると言えそうだ。おおかた、プロジェクトの誰かが package-lock.json を変更したときにコミットを忘れたんだろうか。