composer global require ほげほげで失敗しまくった話
結論
global で色々やるのはやめたほうがいい。
だがしかし現実
とはいえその道の玄人じゃないので、公式の通りやっちゃうんですよね。
解決策 (全消し脳筋パターン)
- ターミナルで global のディレクトリ
/Users/[あなたのユーザ名]/.composer/
に移動する - composer.json を削除
-
vender
ディレクトリの中身を全て削除 -
composer clear-cache
を実行 -
composer.lock
を削除
注意
- 実行環境は macOS
- 入れたもの全部消えます (他のプロダクトに影響する可能性大)
- composer コマンドはパスを通してある前提
失敗したこと
次のコマンドを発行したところ、
composer global require "laravel/homestead=~2.0
以下の結果になった。
Installation failed, reverting ./composer.json to its original content.
ログを見ると conflicts with
とか Installation request for ほげほげ (locked at v4.3.1) -> satisfiable by ほげほげ[v4.3.1].
といったものがみえる。
インストール済みのライブラリと、これから入れたいものが使うライブラリでバージョンが食い違っているよという話のようだ。
node とか他のパッケージマネージャを見習ってほしい。
トライアンドエラー
composer.json の削除
まずやって見たのが composer.json
の削除。
rm composer.json
当然のごとく改善せず。
composer.json
は npm で言うところの package.json
みたいなもので、このライブラリ使いますと言う宣言ファイルに過ぎない。
なのでこれを消したところで実態は消えないので何の解決にもならない。
vendar
ディレクトリの中身を削除
じゃぁ、実態を消してみよう。
rm -rf vendar/*
はい、だめでした。
なぜかと言うと、実態は消えてもインストールした実績が残っているからだ。
実績は composer.lock
というファイルで管理されており、これは npm で言うところの package-lock.json
に当たる。
キャッシュをクリアして見る
composer.lock
に気づく前に、キャッシュクリアを試してみた。
composer clear-cache
だめでした。
理由は前述のとおり。
composer.lock の削除
rm composer.lock
これでやっとインストールできるようになりましたとさ。
git でこいつらを管理するかどうか論争があるのはこう言う不幸があるからなのだろう。
もちろん管理する意義はあるとは思う。
この辺りは宗教とか政治に通ずるものがあるので深入りはしない。
composer
便利なので用法用量を守って使用してね!
良き composer life を!
Discussion