Mengenai hierarki folder sumber, selalu ada beberapa fitur umum, seperti src
, doc
atau test
folder, yang memiliki konten yang agak mudah dipahami.
Namun, saya menyadari bahwa proyek-proyek besar memiliki a lib
dan vendor
folder, sementara saya selalu berpikir mereka sama, seperti nama mereka mengisyaratkan termasuk "pihak ketiga libraries
dari luar vendors
". Padahal, melihat kedua dalam proyek yang sama berarti ada adalah perbedaan.
Saya tidak dapat menemukan informasi atau di Google atau pada sumber-sumber seperti Filesystem Hierarchy Standard , meskipun ini sebenarnya merupakan praktik yang umum .
Berikut ini adalah contoh yang lebih rinci dengan Symfony : setelah Anda membuat proyek, Anda mendapatkan lib
folder di root proyek Anda. Dalam folder ini, struktur berikut ditemukan:
lib
+--filter
+--form
+--…
+--vendor
+--simpletest
+--symfony
Di sini, symfony
folder tersebut berisi semua inti Symfony.
sumber
lib/vendor
dan direktori lainvendor
. Dan mereka bukan satu-satunya . "Semua orang dapat memilih struktur dir" Ya, terima kasih. Setiap orang dapat membuat kode sesuai keinginan mereka. Jika saya ingin memanggilsrc
"woudzigouga", saya bisa. Saya tidak bertanya apakah saya bisa tetapi mengapa orang lain yang serius dan terkenal melakukan sesuatu yang terlihat seperti praktik yang baik.lib
memegang perpustakaan inti (perpustakaan yang sangat esensial ATAU perpustakaan yang dibangun dari penulis yang sama dengan kerangka kerja) danvendor
memegang perpustakaan pihak ketiga, saya tidak berpikir ada perbedaan waras lainnya. Perbedaan itu agak penting karena berbagai alasan, dan itu masuk akal sebagai praktik generik.Jawaban:
Ketika saya melihat direktori
lib
ataulibraries
, saya memikirkan:Ketika saya melihat
vendor
direktori, saya memikirkan:Ketika saya melihat
lib
danvendor
direktori, saya memikirkan beberapa perbedaan:lib
hanya memegang perpustakaan,vendor
dapat menyimpan apa saja,lib
Di sinilah saya harus meletakkan perpustakaan saya, divendor
mana saya harus meletakkan apa pun pihak ketiga (termasuk kode oleh penulis asli),lib
adalah tempat perpustakaan oleh penulis asli proyek berada (jika itu bukan saya), sedangkan divendor
mana penulis asli meletakkan apa pun pihak ketiga.lib
dalamnya dilisensikan dengan lisensi yang sama dengan proyek lainnya.Mana pun dari yang di atas berlaku, cukup alasan untuk memiliki folder yang berbeda. AFAIK tidak ada praktik yang diterima secara umum. Beberapa komunitas memiliki praktik umum yang luas di masyarakat, tetapi hanya itu saja.
Adapun contoh Symfony spesifik: Symfony adalah suatu kerangka kerja dan saya pikir apa yang pengembang katakan adalah bahwa dalam aplikasi Symfony pustaka inti kerangka kerja adalah kode vendor, yaitu berasal dari pihak ketiga dan bukan dari penulis asli aplikasi tersebut. (kamu).
sumber
data
atauresources
(atau sesuatu yang lebih tepat di sepanjang barisimg
), IMHO. Terlebih lagi, dalam contoh Symfony kami,vendor
sebenarnya berisi semua inti Symfony, jadi kecuali jika saya tidak mendapatkan denominasi "penulis asli" Anda, saya tidak berpikir itu sesuai dengan poin 2 dan 3. Andaresources
atauassets
, tetapi tergantung pada proyek itu bisa masuk akal dalamvendor
direktori (saya lebih sukaassets
benar-benar).lib
vslibs
danvendor
vsvendors
?Generalisasi jawaban @ WayneM tetapi tidak berani mengeditnya terlalu banyak.
Jadi, tampaknya struktur ini dapat diamati dalam kerangka kerja aplikasi (setidaknya Rails dan Symfony).
Ini adalah cara untuk menjaga
lib
/src
struktur tetap untuk pengembang aplikasi, sambil menambahkan tingkat jarak lain yang dibawa oleh penggunaan kerangka kerja:vendor
folder tersebut sebenarnya berisi pustaka kerangka kerja, meninggalkanlib
folder untuk pustaka aplikasi yang disertakan, dansrc
untuk sumbernya file.Ini adalah "lebih jauh"
lib
, penting karena tanpa kerangka kerja, aplikasi tidak berguna, tetapi tidak untuk disentuh oleh pengembang aplikasi: itu adalah perpustakaan kerangka kerja vendor .sumber
Dalam kasus sesuatu seperti Symfony,
lib
adalah kode aplikasi (yaitu yang ditulis oleh pengembang) danvendor
merupakan kode pihak ketiga. Anggap saja lib adalahsrc
folder yang biasanya, dan vendor lib. Saya biasanya melihat gaya itu di PHP karena Anda memisahkan template html dari kelas yang sebenarnya.sumber
Dari panduan Pipeline Asset Rails :
app/assets
adalah untuk aset yang dimiliki oleh aplikasi, seperti gambar khusus, file JavaScript, atau stylesheet.lib/assets
adalah untuk kode perpustakaan Anda sendiri yang tidak benar-benar cocok dengan ruang lingkup aplikasi atau perpustakaan yang dibagikan di seluruh aplikasi.vendor/assets
adalah untuk aset yang dimiliki oleh entitas luar, seperti kode untuk plugin JavaScript dan kerangka kerja CSS.Saya tahu ini bukan pertanyaan Rails khusus, tetapi penjelasannya bagus dan jelas dan mungkin meluas ke kerangka kerja lain / struktur proyek.
sumber