Zenn-CLIを使っててpackage-lock.jsonがコンフリクトした時の対処
TL;DR
Zenn-CLIを使って、かつGitHubリポジトリで連携している時、マージしようとしてpackage-lock.jsonがコンフリクトした場合は、
npm install zenn-cli@latest
git add package-lock.json
git commit -m "updates package-lock.json"
とすれば良い。
はじめに
Zenn-CLIを使い、かつGitHubリポジトリ連携でZennのコンテンツを管理している人は多いと思う。で、ある場所でコンテンツをアップデートしてpushした後、別の場所でfetch;mergeしたら、package-lock.jsonがコンフリクトしたよ、と言われ、npmに詳しくない人(例えば俺)は「え?何それ」と焦ることになる。この記事はそういう人のために、何が起きたか、どうすれば良いかをまとめたもの。
何が起きたか
Zenn-CLIはNode Package Manager(npm)のパッケージとして管理されている。npmでプロジェクトを作ると、package-lock.jsonができる。ここには、現在インストールされているパッケージのバージョンが記録されている。さて、Zenn-CLIは、新しいバージョンがあると更新通知を出すので、そこで以下のコマンドを実行する。
npm install zenn-cli@latest
この時、このコマンドによりZenn-CLIや依存パッケージのバージョンが上がり、それがpackage-lock.jsonに記録される。package-lock.jsonもGit管理下にあるので、そのままadd, commit, pushにより更新される。この状態で、まだZenn-CLIが古いままの別のマシンでgit fetch;mergeすると、package-lock.jsonがコンフリクトすることになる。
どうすれば良いか
package-lock.jsonは、現在のプロジェクトのパッケージのバージョンを記載しているだけなので、使っているパッケージを最新版にアップデートすれば良い。今回の場合なら、zenn-cliを最新版にすれば良いので、コンフリクトした状態のまま以下のコマンドを実行する。
npm install zenn-cli@latest
すると、(必要があれば)パッケージのバージョンが上がり、かつpackage-lock.jsonが作り直されて上書きされるので、あとはaddしてcommitすれば良い。
通常、package-lock.jsonを使うことはないが、リポジトリ間でパッケージのバージョンが違ったりすると地味に嫌なことが置きそうなので、.gitignoreに入れたりはしないほうが良いと思う。また、npm ciを使ったりする場合には必要となる。
まとめ
-
package-lock.jsonは、現在のプロジェクトのパッケージのバージョンを記録している -
package-lock.jsonがコンフリクトしたら、npm installで必要なパッケージを更新し、package-lock.jsonを上書きしてadd, commitすれば良い。
Discussion