Help us understand the problem. What is going on with this article?

package-lock.json yarn.lock をコンフリさせない方法

More than 1 year has passed since last update.

yarn.lock が意図しないときに更新されてコンフリすることありませんか?
この問題をバージョニングを固定して解決する Tips の紹介です。
環境は yarn 1.9.4 npm でも大きくは変わらないものと思われます。

前提

なぜ yarn.lock が必要か。
より正確に依存を記述して再現性を担保するためです。
yarn.lock
ではなぜ package.json でそれが担保できないか
^, ~ というバージョン指定に振れ幅があるからです。
semver

この前提を知っていれば意図せず yarn.lock が更新されているという疑問にはならないだろうと思うので補足です。

この semver というバージョニングの手法は軽微なバグ修正によって、引き起こる変更を取り込みやすくするという意図のもので個人的にはポジティブです。一人で開発するならこれを利用して開発するだろうと思います。
一方 Git による共同開発の場面では、これによっていらぬコンフリが起こってしまうこともあります。これを防ぐために バージョニングを固定する方法を記します。

[追記 2019/2/12]
yarn は yarn.lock のコンフリクトを解消する機能を持っています。
以下の内容ではなく、ベストなのはこの機能を使うことだと思われます。
https://code.fb.com/developer-tools/announcing-yarn-1-0/

一応内容は残しておきます。

作業

$ cd ${cwd}
$ touch ./.yarnrc`
$ echo "save-prefix """ >> ./.yarnrc`

あとすでに記述されている packge.json も当然編集が必要です。

一応公式にはこれで .yarnrc を追加できるような物言いをしているんですが、私はできませんでした。書いてはおきます。
自分はこの issue の手順通りやったまでです。
https://github.com/yarnpkg/yarn/issues/3045 

$ yarn config set save-prefix false

また .yarnrc の内容も

save-prefix false

と書いても良さそうだったのですが false がなぜか文字列として認識されてしまって false1.0.0 みたいなことになってしまいます。😔

注意

node modules のバージョンアップを恐れない姿勢でないならば、こういう運用はオススメはできません。おそらく npm の場合 2 年程度放置するだけでバージョンアップに追いつけないものになってしまう可能性があるからです。ある程度バージョニングにバッファを持たせて細かくエラーに対処する方が気にしなくてよくて持続的でしょう。

とはいえ yarn が適宜 deprecated になった api などを警告してくれるので、きちんとそれを解決しておけば大きな問題にはならないだろうと思っています。

以上

追記

yarn install で 自動でコンフリクトを解消してくれる機能があります。yarn を使っている場合はそちらの機能を使ってコンフリクトを解消した方がいいでしょう。

takewell
新卒一年目, Web で世直ししたいです。
https://takewell.dev
zozotech
70億人のファッションを技術の力で変えていく
https://tech.zozo.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away