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 を変更したときにコミットを忘れたんだろうか。