package-lock.json を生成しないようにする

npm v5 から、package.json とは別に、package-lock.json というファイルが生成されるようになった。npm パッケージの依存関係が膨らんできて、「依存パッケージの依存パッケージがパッチアップデートしたことでツールが動かなくなった」といった事態が起きたりしている。

こうした問題に対処すべく、「依存パッケージの内容を全部書いておきましょう」というのが package-lock.json の役割だ。以前からあった npm-shrinkswap.json より高機能で、npm installnpm update の際に自動更新してくれるのが助かる。

しかし、この機能もまだまだ問題があって、例えば optionalDependenciesfs-extra が含まれているようなパッケージがあると、package-lock.json を生成する OS によってコレを書いたり書かなかったりする。Mac で生成すると fs-extra が書かれるのだが、この package-lock.json を置いた状態で、Windows 環境で npm install すると、「fs-extra はこの OS に合っていないパッケージだ」とエラーになってしまうのだ。

色々と都合の良くないポイントが多かったので、個人的にはまだ package-lock.json を生成しないで運用しようと思っている。

で、本題。npm v5 以降で package-lock.json を生成しないようにするには、以下の設定を ~/.npmrc に追加しておく。

# .npmrc
package-lock=false

コマンドラインで設定するには以下のコマンド。

$ npm config set package-lock false

ちゃんとオプションが用意されていたので助かる。