2013-07-25 2 views
5

私はこのcomposer.jsonファイルComposerで自分のベンダーフォルダをロードするにはどうしたらいいですか?

{ 
    "require": { 
     "filp/whoops": "1.*" 
    } 
} 

を持っているしかし、私はvendor/imaqtpie/framework/srcと呼ばれる自分のプロジェクトのためのフォルダを持っています。これはどこでもホストされていないので、自動ロードファイルを更新するためにcomposer updateを実行すると、エラーが発生します。

The requested package "imaqtpie/framework" could not be found in any version, there may be a typo in package name. 

これを自動ロードファイルに追加して動作させる必要がありました。

'Framework' => array($vendorDir . '/imaqtpie/framework/src') 

これを解決する方法はありますか?

私はこのローカルベンダーフォルダに関係なく、サーバ/バージョンを確認するか、私は作曲に新たなんだので、よりエレガントな解決策を探しているのたびに自動的にロードする必要が作曲をお伝えしたいと思います。

答えて

2

あなたはそれを達成するためにあなたのパッケージのコードを使用して独自のローカルgitリポジトリを作成する必要があります。その後 は、あなたのcomposer.jsonファイルにこのようなものを置きます。あなたはこのようにそれを実装する場合

"repositories": [ 
    { 
     "type":"vcs", 
     "url":"/path/to/your/source" 
    } 
], 

"require":{ 
    "filp/whoops":"dev-master" 
} 

オートローディングは、あなたがこれを行うことができ、いくつかの方法があります

+0

これは正解です。あなたは 'vendor'フォルダをバージョン管理するべきではありません。したがって、ベンダーフォルダに追加したいコードをリポジトリで作って作者に追加するのが最善です。 –

0

...問題にはなりません。

1. 私は最も正しい方法は、それをホストし、Satisを使ってプライベートの 'packagist'を作り出すことです。そして、コンポーザーは "正常に"動作し、最新のバージョンを取得し、バージョンチェックなどを行いますが、あなたはこれを気にしないと言います。

あなたは、私がこれを拡張することができ、より詳細が必要な場合、私は多くのサティスパッケージを設定していると、それは本当によく働きます。

2. あなたの 'imaqtpie'ライブラリが偽のベンダーライブラリである場合(あなたがそこに保存したファイルがあるように思えますあなたは昔ながらのライブラリが含まれるように?)、あなたは単にあなたのトップレベルのアプリケーションからそのフォルダにオートローダーを指すようにクラスマップを使用することができます。これは、最上位のアプリにそのフォルダを含める場合にのみ意味があります。

だからあなたのアプリの作曲のJSONは次のようになります。

{ 
    "require": { 
     "filp/whoops": "1.*" 
    }, 
    "autoload": { 
     "classmap":[ 
      "vendor/imaqtpie/framework/src" 
     ] 
    } 
} 

だから、これはクラスの束がそのフォルダにあります作曲を伝えます。あなたがcomposer dump-autoloadを実行すると、それはフォルダをスキャンし、リストされたすべてのファイルとvendor/composer/autoload_classmap.phpを生成します。

これはあなたが作曲家を使うべき方法ではありませんが、あなたが作曲家のオートローダーの使い方を尋ねているパッケージ管理用の作曲家を使用するよう求めているわけではありません。あなたがリスクを理解している限り。再び

{ 
    "require": { 
     "filp/whoops": "1.*" 
    }, 
    "autoload": { 
     "psr-4":{ 
      "Imaqtpie\\Framework\\":"vendor/imaqtpie/framework/src" 
     ] 
    } 
} 

3. あなたのパッケージがPSR0または4のいずれかである場合

は、あなたが同様にあなたのトップレベルのアプリでこれを行うだろう(それは「SRC」フォルダからそう聞こえます)少し奇妙ですが、うまくいくはずです!

通常は、あなたのパッケージの composer.jsonでこのパスを指定するだろうし、アップデートを行うときに、それはあなたのcomposer.lockにマージ取得し、vendor/composer/installed.json(ダンプ自動ロードするために使用するソースです)。しかし理論的には、トップレベルのアプリケーションから必要なものを読み込むことができるので、パッケージをベンダーのライブラリとクラスパスに「ハードコード」することができます。

ではなく、とお勧めします。ベンダーのフォルダは、ほとんどの人やプログラムが気まぐれに破壊して再構築できると考えられる、貧弱な場所です。だからパッケージに入っていないものを保管するのは危険な場所です。同じことを想定する他の開発者にとっても混乱します。

ライブラリをベンダーのフォルダから離れた別の場所に移動することをおすすめします。 'lib'を作成し、上のクラスパスの手法を使ってそれをオートローダーに組み込みます。