Saya mulai menggunakan komposer, saya tahu sedikit tentangnya dan memiliki sedikit pengalaman dengan pengembangan aplikasi web.
Saya baru saja mengikuti Tutorial Nettuts + , jadi saya punya pertanyaan dasar tentang komposer.
{
"require": {
"laravel/framework": "4.0.*",
"way/generators": "dev-master",
"twitter/bootstrap": "dev-master",
"conarwelsh/mustache-l4": "dev-master"
},
"require-dev": {
"phpunit/phpunit": "3.7.*",
"mockery/mockery": "0.7.*"
},
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
"scripts": {
"post-update-cmd": "php artisan optimize"
},
"minimum-stability": "dev"
}
- Apa pun yang muncul
"require-dev"
sebagian, hanya akan diunduh dan diinstal dengancomposer install --dev
? - Saya membaca beberapa dokumentasi komposer tapi masih belum paham apa alasan kami ikut
"require-dev"
serta? Apakah karena kami ingin mendapatkan versi paket tertentu daripada selalu mendapatkan versi stabil terbaru?
composer-php
Tukang
sumber
sumber
Jawaban:
Lingkungan yang Berbeda
Biasanya, perangkat lunak akan berjalan di lingkungan yang berbeda:
development
testing
staging
production
Ketergantungan Berbeda di Lingkungan Berbeda
Dependensi yang dideklarasikan di
require
bagiancomposer.json
biasanya adalah dependensi yang diperlukan untuk menjalankan aplikasi atau paket distaging
production
lingkungan, sedangkan dependensi yang dideklarasikan di
require-dev
bagian biasanya adalah dependensi yang diperlukan dalamdeveloping
testing
lingkungan.
Misalnya, selain paket yang digunakan untuk benar-benar menjalankan aplikasi, paket mungkin diperlukan untuk mengembangkan perangkat lunak, seperti:
friendsofphp/php-cs-fixer
(untuk mendeteksi dan memperbaiki masalah gaya pengkodean)squizlabs/php_codesniffer
(untuk mendeteksi dan memperbaiki masalah gaya pengkodean)phpunit/phpunit
(untuk mendorong pengembangan menggunakan tes)Penyebaran
Sekarang, di dalam
development
dantesting
lingkungan, Anda biasanya akan menjalankanuntuk menginstal keduanya
production
dandevelopment
dependensi.Namun, dalam
staging
danproduction
lingkungan, Anda hanya ingin menginstal dependensi yang diperlukan untuk menjalankan aplikasi, dan sebagai bagian dari proses penerapan, Anda biasanya akan menjalankanuntuk menginstal
production
dependensi saja .Semantik
Dengan kata lain, bagian
require
require-dev
tunjukkan
composer
paket mana yang harus diinstal saat Anda menjalankanatau
Itu semuanya.
Catatan Ketergantungan pengembangan paket yang bergantung pada aplikasi atau paket Anda tidak akan pernah diinstal
Untuk referensi, lihat:
sumber
vendor
folder melalui FTP?—no-dev
. Selain itu, FTP mungkin akan sangat lambat.composer.json
- lihat misalnya github.com/FriendsOfPHP/PHP-CS-Fixer/tree/2.16/dev-tools .Menurut manual komposer :
Jadi menjalankan
composer install
juga akan mendownload dependensi pengembangan.Alasannya sebenarnya cukup sederhana. Saat berkontribusi ke pustaka tertentu, Anda mungkin ingin menjalankan rangkaian pengujian atau alat pengembangan lainnya (mis. Symfony). Namun jika Anda menginstal library ini ke sebuah project, dependensi pengembangan tersebut mungkin tidak diperlukan: tidak setiap project memerlukan runner pengujian.
sumber
Dari situs komposer (cukup jelas)
Dengan menggunakan require-dev di Composer, Anda dapat mendeklarasikan dependensi yang Anda perlukan untuk pengembangan / pengujian proyek tetapi tidak perlu dalam produksi. Ketika Anda mengunggah proyek ke server produksi Anda (menggunakan git)
require-dev
bagian akan diabaikan.Periksa juga jawaban ini yang diposting oleh penulis dan posting ini juga.
sumber
membutuhkan bagian ini berisi paket / dependensi yang merupakan kandidat yang lebih baik untuk diinstal / diperlukan di lingkungan produksi.
Bagian require-dev: Bagian ini berisi paket / dependensi yang dapat digunakan oleh pengembang untuk menguji kodenya (atau untuk bereksperimen pada mesin lokalnya dan dia tidak ingin paket ini diinstal pada lingkungan produksi).
sumber
Aturan umumnya adalah Anda menginginkan paket dari bagian require-dev hanya di lingkungan pengembangan (dev), misalnya lingkungan lokal.
Paket di bagian require-dev adalah paket yang membantu Anda men-debug aplikasi, menjalankan pengujian, dll.
Pada lingkungan staging dan produksi Anda mungkin hanya menginginkan paket dari yang dibutuhkan bagian .
Tetapi bagaimanapun Anda dapat menjalankan composer install --no-dev dan composer update --no-dev pada lingkungan apa pun, perintah hanya akan menginstal paket dari bagian yang diperlukan bukan dari require-dev , tetapi mungkin Anda ingin menjalankan ini hanya pada pementasan dan produksi lingkungan tidak lokal.
Secara teoritis Anda dapat meletakkan semua paket di bagian require dan tidak akan terjadi apa-apa, tetapi Anda tidak ingin mengembangkan paket di lingkungan produksi karena alasan berikut:
Beberapa kandidat yang baik untuk require-dev adalah:
Anda dapat melihat apa yang dilakukan paket di atas dan Anda akan melihat mengapa Anda tidak membutuhkannya dalam produksi.
Lihat lebih lanjut di sini: https://getcomposer.org/doc/04-schema.md
sumber
Perhatikan Requirement-dev (root-only) !
yang berarti bahwa bagian require-dev hanya valid jika paket Anda adalah root dari keseluruhan proyek. Yaitu jika Anda menjalankan
composer update
dari folder paket Anda.Jika Anda mengembangkan plugin untuk beberapa proyek utama, yang memiliki composer.json sendiri, maka bagian require-dev Anda akan sepenuhnya diabaikan! Jika Anda membutuhkan dependensi pengembangan, Anda harus memindahkan require-dev ke composer.json di proyek utama.
sumber