composer global require ほげほげで失敗しまくった話


結論

global で色々やるのはやめたほうがいい。

だがしかし現実

とはいえその道の玄人じゃないので、公式の通りやっちゃうんですよね。

解決策 (全消し脳筋パターン)

  1. ターミナルで global のディレクトリ /Users/[あなたのユーザ名]/.composer/ に移動する
  2. composer.json を削除
  3. vender ディレクトリの中身を全て削除
  4. composer clear-cache を実行
  5. 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 を!