npm パッケージでの package-lock.json の扱い
npm パッケージで package-lock.json
をどのように扱えばいいのかわからなかったのでメモ。
最近の npm
では npm install
した際に、package-lock.json
が生成されます。
この pacakge-lock.json
を見るとオプション*1によっては、以下のように package-lock.json に記述されるライブラリのバージョンが固定化されます。
// サンプル "agent-base": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", "requires": { "es6-promisify": "5.0.0" }
ただし、普段自分は gulp-nightwatch というライブラリをメンテナンスしており、 上記の様な package-lock.json を含んだ npm パッケージをリリースすると、「パッケージ利用者の人が固定化されたライブラリしか利用できず、プロジェクトで利用しているパッケージによっては依存関係が解決できないのでは?」と思い、大丈夫なのかどうか調べてみました。
結論から書くと、package-lock.json
のバージョンを固定化しても問題なさそうです。
というのも、 package-lock.json
は npm へ pulish ( npm へのリリース ) の際には無視されるそうです。
npm-package-lock.json | npm Documentation
One key detail about package-lock.json is that it cannot be published, and it will be ignored if found in any place other than the toplevel package. It shares a format with npm-shrinkwrap.json, which is essentially the same file, but allows publication. This is not recommended unless deploying a CLI tool or otherwise using the publication process for producing production packages.
そのため、(npm パッケージの)リポジトリに含まれていても特に問題はなく、 package-lock.json
はライブラリの開発の際に利用されるもののようです。
なるほど。なるほど。
*1:save-exact