“Lib” ve “vendor” klasörleri arasındaki fark nedir?


103

Kaynak klasör hiyerarşisi ile ilgili olarak, bazı ortak gibi özellikler her zaman vardır src, docya testdaha doğrusu kolay anlaşılır içeriğe sahip klasörleri.

Ancak, ben büyük projeler a ikisine de sahip olduğunu fark libve vendoradları “üçüncü taraf dahil ima olarak hep aynı düşünce vardı iken, klasörler librariesharici gelen vendors”. Yine de, ikisini de aynı projede görmek bir fark olduğu anlamına geliyor .

Bu aslında bir şekilde yaygın bir uygulama olmasına rağmen, ne Google’da ne de Dosya Sistemi Hiyerarşisi Standardı gibi kaynaklarda bulamadım .


İşte Symfony ile daha ayrıntılı bir örnek : Bir proje oluşturduktan sonra lib, projenizin kökünde bir klasör alacaksınız . Bu klasörde aşağıdaki yapı bulunur:

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

Burada, symfonyklasör tüm Symfony'nin çekirdeğini içerir.


3
@YannisRizos Kaynaklarında olmadığını biliyorum. Bir proje üzerinde çalışmaya başladığınızda ve modüller oluşturduğunuzda, bununla birlikte lib/vendorve diğer dizinlerle sonuçlanırsınız vendor. Ve onlar sadece onlar değil . “Herkes herhangi bir dir yapmayı seçebilir” Evet, teşekkürler. Herkes istediği gibi kodlayabilir. Ben aramak isterseniz src“woudzigouga”, yapabilirim. Yapıp yapamayacağımı sormuyorum ama neden ciddi ve tanınmış diğerlerinin iyi bir uygulama gibi görünen bir şey yaptığını soruyorum.
MattiSG

2
Belli libbaşlı kütüphaneler (kesinlikle temel kütüphaneler VEYA aynı yazardan yapılmış kütüphaneler) vendorbarındıran ve üçüncü şahıs kütüphaneleri tutanlar dışında, başka aklı başında bir ayrım olduğunu sanmıyorum. Bu ayrım, çeşitli nedenlerden dolayı biraz önemlidir ve genel bir uygulama olarak anlamlıdır.
yannis

1
btw, yorumdaki açıklamaları sorunuza ekleyebilir misiniz?
yannis

@YannisRizos Ne açıklamalar? Sorumu kanıtlayan Google Code search tamamen sahte değil mi? Ayrımın önemli olduğu “çeşitli nedenlerin” ayrıntılarını detaylandırabilir ve bazı üçüncü tarafların diğerlerinden daha önemli olabileceğini açıklamanın yanı sıra, eğer dahil edilmişlerse, bunun dışında bir neden var. bakıcılar yetersiz ve toplu kod içeriyor.
MattiSG

1
/ Lib / içindeki şeylere dokunabilirsiniz, / vendor / içindeki şeylere dokunamazsınız
Timo Huovinen

Yanıtlar:


64

Bir dizini libveya librariesdizini gördüğümde şunu düşünüyorum:

  • Kütüphaneler, eklentiler değil modüller vs.
  • Usul yerine OOP, uygulanabilir olan yerlerde (örneğin, PHP)

Bir vendordizin gördüğümde şunu düşünüyorum:

  • Kütüphaneler, eklentiler, modüller, bileşenler vb. Yalnızca kütüphaneler değil, üçüncü bir tarafça sağlanan herhangi bir şey.
  • Ve simge seti gibi kod olmayan şeyler.

Dizinleri gördüğümde libve gördüğümde vendor, birkaç farklılığı düşünüyorum:

  1. libsadece kütüphaneleri tutar, vendorgerçekten her şeyi tutabilir,
  2. libkütüphanelerimi vendornereye koymalıyım, üçüncü tarafa bir şey koymalıyım (orijinal yazarın kodu dahil),
  3. libProjenin asıl yazarının kütüphanelerinin bulunduğu yer (eğer o ben değilsem), vendorasıl yazarın üçüncü tarafa bir şey koyduğu yerdir.
  4. İçinde bulunanların lib, projenin geri kalanıyla aynı lisans altında lisanslı olduğunu güvenle kabul edebilirsiniz .

Yukarıdakilerden hangisi geçerlidir, farklı klasörlere sahip olmak için yeterli bir nedendir. AFAIK, genel olarak kabul edilmiş bir uygulama yoktur. Bazı topluluklar topluluk genelinde ortak uygulamalara sahiptir, ancak bu onunla ilgilidir.


Spesifik Symfony örneğine gelince: Symfony bir çerçevedir ve geliştiricilerin söylemeye çalıştığı şeyin bir Symfony uygulamasında çerçevenin ana kütüphanelerinin satıcı kodu olduğunu, yani uygulamanın orijinal yazarından değil, üçüncü bir taraftan geldiğini düşünüyorum. (sen).


2
“Kodlanmayan şeyler ” IMHO'da dataveya resources(ya da satırları boyunca daha kesin bir şey img) olur. Ayrıca, bizim Symfony'nin örnekte, vendoraslında senin “asıl yazar” mezhep alamadım sürece, bunu puanlarınızı 2 ve 3. uyuyor sanmıyorum, tüm Symfony'nin çekirdek içeriyor
MattiSG

1
@MattiSG Ah, üzgünüm, dört noktaya da uyması gerektiğini söylemiyorum. Sadece bir tane. Ve "Kod olmayan sayfalar" bir dizinde resourcesya da assetsdizinde olmalı , ancak projeye bağlı olarak bir vendordizinde anlamlı olabilir ( assetsgerçekten tercih ederim ).
yannis,

4
Daha iyi tekil veya çoğul nedir? libvs libsve vendorvs vendors?
Quang

4
@Quang Gördüğüm en popüler projeler tekil kullanıyor, fakat hangisinin daha iyi olduğu hakkında hiçbir fikrim yok.
yannis,

@YannisRizos: prosedür yerine OOP hakkında ne düşünüyorsun?
Matt O'Brien,

21

@ WayneM'in cevabını genelleştirmek, ancak çok fazla düzenlemeye cesaret edemiyor.

Dolayısıyla, bu yapı uygulama çerçevelerinde gözlenebilir (en azından Rails ve Symfony).

lib/ srcYapısını uygulama geliştiriciler için sağlam tutmanın bir yoludur , bir çerçevenin kullanımıyla getirilen diğer uzaklık seviyesini ekler : vendorklasör aslında çerçevenin kütüphanelerini içerir lib, uygulamanın dahil edilen kütüphaneler için klasörünü bırakır srcve kaynağı Dosyalar.

libÇerçeve olmadan, uygulamanın yararsız olduğu, ancak uygulamanın geliştiricisi tarafından dokunulmaması gerektiği için hayati bir “daha ​​uzak” tır: çerçeve satıcısının kütüphaneleridir .


10

Symfony gibi bir durumda lib, uygulama kodu (yani geliştiriciler tarafından yazılmış) ve vendorüçüncü taraf kodu. Lib'in srcklasörün normal olduğunu ve satıcının lib olduğunu düşünün . Normalde PHP'de bu stili görüyorum, çünkü html şablonlarını gerçek sınıflardan ayırıyorsunuz.


2

Gönderen Raylar Varlık Boru Hattı rehber :

  • app/assets Özel görüntüler, JavaScript dosyaları veya stil sayfaları gibi uygulamanın sahip olduğu varlıklar içindir.

  • lib/assets Kendi kütüphanelerinizin kodu, uygulamanın kapsamına gerçekten uymayan veya uygulamalar arasında paylaşılan kütüphaneler içindir.

  • vendor/assets JavaScript eklentileri için kod ve CSS çerçeveleri gibi dış varlıklar tarafından sahip olunan varlıklar içindir.

Bunun Rails'e özgü bir soru olmadığını biliyorum, ancak açıklama iyi ve açık ve muhtemelen başka çerçevelere / proje yapılarına kadar uzanıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.