マイナー バージョン、重大な変更 – Stitcher.io

in Vlog

(jp) =

私の同僚の Sebastian が、メジャー バージョンの変更は破壊的な変更ではないことについて書いたとき、私は心から同意します。

私はもうできません。 少なくとも、composer が今日どのように機能するかではありません。

昨日、重大な変更に遭遇しました。 それでも、メジャー バージョン アップグレードは行っていません。 幸いなことに、私の別の同僚である Ruben が、本番環境にプッシュする前にこの問題を発見しました。

これが何が起こったのかです。

私たちのプロジェクトの 1 つが 2 周年を迎えようとしています。そのため、かなりの数のバージョン バンプが発生していると言えます。 2 年間の開発の後、使用したパッケージは次のとおりです。


    "laravel/framework": "^6.5",
    "league/commonmark": "^0.17.5",
    "spatie/laravel-view-components": "^1.2",

    

初めに、 laravel/framework:^6.5. 通常、Laravel の次のメジャー バージョンに更新するまでに 1 ~ 2 か月かかります。 今日の時点で、問題を修正するために必要だった 7 を実行しています。

次は league/commonmark:^0.17.5; 2018 年 5 月に追加された非常に具体的な依存関係。当時、この特定の依存関係が必要でした。変更ログによると、 Fixed incorrect version constant value (again). このバージョンを使用しないと、他のパッケージと競合する可能性があります。

2年が経ち、 league/commonmark それ以来、最初の安定版リリースにタグを付けました。 これは彼らがもっと早くやるべきだったことですが、それは別の日のトピックです.

最後に spatie/laravel-view-components:^1.2. バージョン 7 の Laravel のブレード コンポーネントを優先して、最近アーカイブされたパッケージ。 将来のある時点で削除する可能性がありますが、これにはもちろん時間がかかり、クライアントに費用がかかります。 それは私たちが「ただできる」ことではありません。

準備が整い次第、問題を調査します。 昨日、私たちは composer update、そして物事が壊れました。

より具体的には、 spatie/laravel-view-components パッケージは単に機能しなくなりました。 ビュー コンポーネントをレンダリングする代わりに、render タグのみを表示しました。 バージョンの時点で既知の問題であることが判明しました 1.3.0、および固定 1.3.1. この修正は、悲惨な状況を実行したときにすでに存在していました composer update、それでも私たちはそれを受け取りませんでした。 私たちの spatie/laravel-view-components ロックオンされたようだった 1.3.0に更新したくなかった 1.3.1.

そんな窮地に陥ったときはいつでも、慌てず落ち着いてください。composer が助けてくれます。 単に使用する composer why-not spatie/laravel-view-components:1.3.1 何が問題なのかを正確に教えてくれます。

であることが判明した spatie/laravel-view-components:1.3.1、 これは laravel/framework 依存バージョンはからバンプされました ^6.0^6.18.

それ自体は問題にならないはずです。 laravel/framework:^6.5 私たちのプロジェクトでは、ロードできるはずです ^6.18 大丈夫です。

残念ながら、それは起こりませんでした。 分かりますか、 laravel/framework への依存関係を追加しました league/commonmark:^1.1 バージョンで 6.10. 実際には、この追加は、依存関係のメジャー バージョンを更新するのと同じ効果があります。 ^1.1.

繰り返しますが、その変更自体は重大な変更ではありませんが、 やりました 防ぐ laravel/framework 私たちのプロジェクトでは、より高く更新することから 6.9、私たちの要件のため league/commonmark:^0.17.5. それが逆に防げた spatie/laravel-view-components からの更新 1.3.01.3.1、非常に必要なバグ修正が含まれていました。


それで、誰のせいですか? 最初に自分自身に指を向けましょう。更新する必要がありました league/commonmark より早く。 次のように、バグ修正と依存関係のバージョン バンプを組み合わせることもできます。 spatie/laravel-view-components でした 1.3.1、避けるべきです。 しかし、修正を機能させるためにバージョンアップが必要な場合、できることはほとんどありません。

あなたはそれを言うことができます laravel/framework その (暗黙の) 依存関係の 1 つを更新するべきではありませんでしたが、更新によってセキュリティの問題が修正された場合は特に、これを行うのは完全に正常なことです。

ちなみに、解決策は更新で構成されていました laravel/framework^7.0 —とにかく遅かれ早かれこれをしなければなりませんでした—そして league/commonmark 依存。 したがって、オープン ソース ベンダーがこの変更を避けるべきではないと思います。 オープン ソース コードは、定期的な更新に向けて私たちを後押しする必要があります。

しかし、本当の問題は、作曲家が私たちにそれを通知しなかったことです laravel/framework それ以上更新できませんでした 6.9 根底にある対立のため。 各依存関係を慎重に管理していないと、古い依存関係に行き詰まる危険があり、多くの必要なバグ修正がインストールされない可能性があります。

私の知る限り、渡すことができるオプションはありません composer update このような状況について通知することができ、将来的には良い追加になると思います.

私の同僚の Freek は、まさにこれを行う外部ライブラリがあることを指摘しました: https://github.com/Soullivaneuh/composer-versions-check. この機能が作曲家に組み込まれているとよいでしょう。

tpyoに気づきましたか? PR を送信して修正することができます。 このブログの最新情報を知りたい場合は、私をフォローしてください。 ツイッター または私のニュースレターを購読してください:

//platform.twitter.com/widgets.js

関連記事

前の投稿
毎年戻ってくる6つの最高の多年生ひまわり
次の投稿
カリフォルニアの9つの在来植物