composer.jsonに"vendor/package": "dev-master as 1.1.1"のように書くと、バージョンを詐称できて便利だった。
ComposerはPHPのパッケージ間のバージョンの互換性をしっかり管理してくれて、互換性に問題があれば報告してくれる。普段はありがたい安全装置だが、例えば次のような場面では不自由がある。
- パッケージ
foo/bar
は、4.6.3
までリリースされている。 -
foo/bar
のdev-master
にどうしても使いたい機能がある! - 別バッケージ
hoge/fuga
はfoo/bar
に依存しており、バージョンは4.6系を必要としている。
そのため、foo/bar
のdev-master
をインストールしようとすると、互換性の問題が報告されインストールできない:
$ composer require foo/bar=dev-master # 4.6.3からdev-masterにアップグレードしたい
Problem 1
- hoge/fuga 3.4 requires foo/bar ~4.6 -> satisfiable by foo/bar[4.6.0, 4.6.1, 4.6.2, 4.6.3] but these conflict with your requirements or minimum-stability.
- hoge/fuga 3.4 requires foo/bar ~4.6 -> satisfiable by foo/bar[4.6.0, 4.6.1, 4.6.2, 4.6.3] but these conflict with your requirements or minimum-stability.
- hoge/fuga 3.4 requires foo/bar ~4.6 -> satisfiable by foo/bar[4.6.0, 4.6.1, 4.6.2, 4.6.3] but these conflict with your requirements or minimum-stability.
- Installation request for hoge/fuga ^3.4 -> satisfiable by hoge/fuga[3.4].
本来なら、互換が表明されていないバージョンを無理くり入れるのはリスクがあるので避けるべきだ。しかし、hoge/fuga
はfoo/bar
のdev-master
と事実上互換していることが明らかな場合はそのリスクがない。
以上のように、バージョンの互換性問題の報告を無視してでも、dev-masterを入れたいときには、"foo/bar": "dev-master as 4.6.4"
のように書くと良い。これは、dev-master
に独自でバージョン「4.6.4」をつけるということだ。
{
"require": {
...
"foo/bar": "dev-master as 4.6.4",
...
},
...
これで、foo/bar
のバージョンは、4.6.4
に詐称できるため、4.6.x
に依存するライブラリとの互換性の問題は報告されなくなる。
なお、次のようにdev-masterのコミットハッシュを指定することもできる。
{
"require": {
...
"foo/bar": "dev-master#a1b2c3d as 4.6.4",
...
},
...
所感
またニッチなノウハウがひとつ増えた。composer.jsonに"vendor/package": "dev-master as 1.1.1"のように書くと、バージョンを詐称できて便利だった。 - Qiita https://t.co/yR3y9Abxuc
— ❄️suin (@suin) 2018年8月6日
Author And Source
この問題について(composer.jsonに"vendor/package": "dev-master as 1.1.1"のように書くと、バージョンを詐称できて便利だった。), 我々は、より多くの情報をここで見つけました https://qiita.com/suin/items/102dbe98e150a144ba27著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .