web-dev-qa-db-ja.com

「lib」フォルダと「vendor」フォルダの違いは何ですか?

ソースフォルダーの階層に関しては、srcdoctestフォルダーなど、いくつかの一般的な機能が常にあり、これらはかなり理解しやすい内容を持っています。

ただし、大きなプロジェクトにはlibvendorの両方のフォルダーがあることに気づきましたが、名前には「サードパーティlibraries外部からvendors」。ただし、同じプロジェクトで両方を見ると、そこに違いがあります違いがあります。

Filesystem Hierarchy Standard のような情報は、実際には 何らかの形で の慣例ですが、Googleでもソースでも見つかりませんでした。


Symfony を使用したより詳細な例を次に示します。プロジェクトを作成すると、プロジェクトのルートにlibフォルダーが作成されます。このフォルダーでは、次の構造が見つかります。

lib
+--filter
+--form
+--…
+--vendor
    +--simpletest
    +--symfony

ここで、symfonyフォルダーにはSymfonyのコアがすべて含まれています。

106
MattiSG

@ WayneMの回答を一般化しますが、それほど大胆に編集することはしません

したがって、この構造はアプリケーションフレームワーク(少なくともRailsとSymfony)で観察できるようです。

これは、アプリケーション開発者がlib/src構造をそのまま維持しながら、フレームワークの使用によってもたらされる他の距離のレベルを追加する方法です:vendorフォルダーには実際にフレームワークのライブラリーが含まれ、libフォルダーはアプリケーションに含まれるライブラリー用、srcはそのソースファイル用です。

フレームワークがないとアプリケーションは役に立たないので、「より遠い」libは不可欠ですが、アプリケーションの開発者は触れないでください。これはフレームワークベンダーのライブラリです。

21
MattiSG

libまたはlibrariesディレクトリを見つけたとき、次のことを考えます。

  • プラグインやモジュールなどではなく、ライブラリ.
  • 手続き型ではなくOOP(該当する場合)(PHPなど)

vendorディレクトリを見ると、次のことを考えます。

  • ライブラリ、プラグイン、モジュール、コンポーネントなど。ライブラリだけでなく、サードパーティによって提供されるもの。
  • そして、アイコンセットのように、コードではないもの。

libおよびvendorディレクトリーを見ると、いくつかの違いがあると思います。

  1. libはライブラリのみを保持し、vendorは実際に何でも保持できます。
  2. libは、ライブラリを配置する場所です。vendorは、サードパーティ(元の作成者によるコードを含む)を配置する場所です。
  3. libは、プロジェクトの元の作成者によるライブラリの場所です(それが私でない場合)。一方、vendorは、元の作成者がサードパーティに提供したものです。
  4. libにあるものはすべて、プロジェクトの他の部分と同じライセンスでライセンスされていると想定しても問題ありません。

上記のいずれかが当てはまる場合、別のフォルダーを作成するのに十分な理由があります。私の知る限り、一般的に受け入れられている慣習はありません。コミュニティによっては、コミュニティ全体に共通の慣行がありますが、それだけです。


特定のSymfonyの例について:Symfonyはフレームワークであり、開発者が言っていることは、Symfonyアプリケーションでは、フレームワークのコアライブラリはベンダーコードである、つまりアプリケーションの元の作成者ではなくサードパーティからのものであると思います(君は)。

65
yannis

Symfonyのようなものの場合、libはアプリケーションコード(つまり、開発者が作成したもの)であり、vendorはサードパーティのコードです。 libはsrcフォルダーが通常何であるか、ベンダーはlibであると考えてください。私は通常、そのスタイルをPHPで見ます。HTMLテンプレートを実際のクラスから分離するためです。

10
Wayne Molina

Railsアセットパイプラインガイド から:

  • app/assetsは、カスタム画像、JavaScriptファイル、スタイルシートなど、アプリケーションが所有するアセット用です。

  • lib/assetsは、アプリケーションまたはアプリケーション間で共有されるライブラリのスコープに実際には適合しない独自のライブラリのコード用です。

  • vendor/assetsは、JavaScriptプラグインやCSSフレームワークのコードなど、外部エンティティが所有するアセット用です。

これはRails固有の質問ではないことはわかっていますが、説明は適切で明確であり、おそらく他のフレームワーク/プロジェクト構造にも及びます。

2
Chico Carvalho