.npmignore と .gitignore の併用に関する仕様

.npmignore.gitignore の関係性と仕様について。

Git の管理から外したいファイルは .gitignore に書く。コレは普通。npm 関係なしに Git のみ使っている時もコレで良い。

npm パッケージを作っていて、.gitignore がない時に、npm publish したくないファイルがあれば、.npmignore に除外ファイルを書けば良い。.npmignore の記法は .gitignore と全く同じ。

npm パッケージを作っていて、.gitignore が既にあり、.npmignore がない場合は、npm publish 時に .gitignore が参照され、Git の管理対象外のファイルは npm に公開されないようになっている。「Git 管理したくないなら npm で公開しない方が良いよね」という配慮だろうか。

しかし、ビルドしたファイルを格納する dist/ ディレクトリなんかは、バージョン管理はしたくないけど npm publish はしたい。そんな時は、.gitignore の他に .npmignore を作る。

.gitignore.npmignore の両方が存在する場合に npm publish すると、.gitignore は参照されず、.npmignore の内容だけが見られる。公式の説明によると、npm publish 時に .gitignore の除外設定を完全に無効にしたければ、空ファイルで .npmignore を置いておけば良い、と書いている。

If you want to include something that is excluded by your .gitignore file, you can create an empty .npmignore file to override it.

つまり、.gitignore に書いていて .npmignore に書いていないファイルは npm publish されてしまうので、基本は .gitignore をベースに、公開したいファイルだけ除外しないように修正したファイルを .npmignore として格納しておく必要がある。

一度理解すれば難しいことではないが、場合によっては若干「二元管理」みたいになるので注意。