Framework Laravel tidak dilahirkan di dalam proyek kita — framework ini diunduh sebagai paket laravel/framework beserta puluhan paket pendukung lainnya oleh Composer, dependency manager standar ekosistem PHP. Setiap proyek Laravel menyimpan daftar kebutuhannya di composer.json, versi terpasang yang pasti di composer.lock, dan seluruh kode paket di folder vendor/. Chapter penutup section ini membongkar ketiganya sekaligus menjawab pertanyaan praktis: kapan kita memakai composer install, kapan composer update, dan apa yang terjadi setiap kali perintah tersebut dijalankan.
Anatomi composer.json #
Berkas composer.json adalah “KTP” proyek kita. Berikut isi asli berkas tersebut dari sandbox Course ini, dengan beberapa bagian dipangkas agar mudah dibaca:
{
"name": "laravel/laravel",
"type": "project",
"description": "The skeleton application for the Laravel framework.",
"license": "MIT",
"require": {
"php": "^8.3",
"laravel/framework": "^13.17",
"laravel/sanctum": "^4.3",
"laravel/tinker": "^3.0"
},
"require-dev": {
"fakerphp/faker": "^1.23",
"laravel/pint": "^1.27",
"mockery/mockery": "^1.6",
"nunomaduro/collision": "^8.6",
"phpunit/phpunit": "^12.5.12"
},
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
},
"scripts": {
"dev": [
"Composer\\Config::disableProcessTimeout",
"@php artisan dev"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
]
}
}Setiap kunci punya peran yang jelas:
| Kunci | Isi | Contoh |
|---|---|---|
name | Identitas paket vendor/nama | laravel/laravel |
require | Paket wajib untuk aplikasi berjalan | laravel/framework |
require-dev | Paket hanya untuk development | phpunit/phpunit |
autoload | Peta autoloading kode proyek kita | "App\\": "app/" |
scripts | Perintah yang bisa dipicu | dev, post-autoload-dump |
Kita bisa memverifikasi berkas ini sah secara struktural dengan perintah berikut, dijalankan dari akar proyek:
composer validateOutput yang Dihasilkan:
./composer.json is validVersion Constraint: ^, ~, dan Versi Eksak #
Perhatikan penulisan "laravel/framework": "^13.17". Composer tidak memasang versi apa pun secara bebas — nilai tersebut adalah version constraint yang harus dipenuhi paket terpilih. Tiga gaya penulisan paling umum:
| Constraint | Arti | Rentang yang diterima untuk contoh |
|---|---|---|
^13.17 | Boleh naik minor dan patch, tidak boleh naik mayor | >=13.17.0 dan <14.0.0 |
~13.17 | Boleh naik patch saja | >=13.17.0 dan <13.18.0 |
13.36.0 | Versi eksak, tidak boleh berbeda sedikit pun | Hanya 13.36.0 |
Tanda sisip ^ adalah pilihan Laravel karena mengikuti janji Semantic Versioning: rilis minor dan patch tidak memuat breaking change, sedangkan loncatan mayor selalu berpotensi mengubah perilaku. Constraint ^13.17 memungkinkan proyek kita menerima perbaikan terbaru di keluarga 13.x tanpa risiko perubahan besar.
Batasan berlaku juga untuk PHP itu sendiri: "php": "^8.3" menyatakan proyek hanya bisa berjalan pada PHP 8.3 atau lebih baru di bawah 9.0 — menegaskan kenapa Course ini menargetkan PHP 8.4.
composer.lock: install vs update #
Hubungan composer.json dan composer.lock adalah daftar keinginan versus catatan kenyataan. Perintah composer install membaca composer.lock dan memasang persis versi yang tercatat di sana — bila berkas lock belum ada, Composer menyelesaikan constraint lebih dulu lalu menuliskannya. Sebaliknya composer update mengabaikan isi lock, mencari versi termutakhir yang memenuhi constraint di composer.json, lalu menulis ulang berkas lock:
| Perintah | Dibaca | Dipasang | composer.lock |
|---|---|---|---|
composer install | composer.lock | Versi terkunci, identik semua mesin | Tidak berubah |
composer update | composer.json | Versi termutakhir yang cocok | Ditulis ulang |
Pola kerja tim menjadi jelas: satu pengembang menjalankan composer update untuk menaikkan versi, menguji, lalu meng-commit composer.lock; rekan lain cukup composer install agar mendapat versi persis sama. Versi yang saat ini terkunci di sandbox Course ini bisa kita baca dari berkas lock — paket laravel/framework tercatat sebagai v13.36.0.
require vs require-dev #
Bagian require-dev berisi paket yang tidak dibutuhkan aplikasi saat berjalan di server produksi — alat tes, code formatter, dan library mocking. Perintah composer install --no-dev melewatinya sehingga deployment produksi lebih ramping. PHPUnit (phpunit/phpunit), Pint (laravel/pint) untuk code style, dan Faker (fakerphp/faker) untuk data dummy semuanya berada di sini — sementara Sanctum dan Tinker ikut require karena dibutuhkan aplikasi.
Autoload dan Folder vendor #
Seluruh kode paket terpasang berada di folder vendor/ — termasuk vendor/autoload.php yang kita temui di chapter Namespace dan Autoloading sebagai satu-satunya require di seluruh aplikasi. Bagian autoload di composer.json mendukung beberapa strategi: psr-4 memetakan namespace ke folder sesuai standar yang kita bahas sebelumnya, sedangkan classmap memindai folder lalu membuat daftar “class ini ada di berkas itu” — dipakai untuk kode lawas yang strukturnya tidak mengikuti PSR-4. Proyek Laravel baru memakai psr-4 untuk seluruh namespace-nya.
Composer Scripts #
Kunci scripts mendefinisikan perintah yang bisa kita panggil dengan composer run <nama>. Dua entri pada berkas kita pantas diperhatikan. Pertama, "dev" — inilah perintah di balik composer run dev yang menjalankan development server Laravel melalui @php artisan dev. Kedua, "post-autoload-dump" — script dengan nama spesial yang otomatis dijalankan Composer setiap kali autoloader dibuat ulang, menjalankan php artisan package:discover agar paket-paket terpasang bisa mendaftarkan service provider-nya.
Memeriksa Paket Terpasang #
Perintah composer show membaca kenyataan di folder vendor/. Kita jalankan untuk paket utama aplikasi:
composer show laravel/framework --no-interactionOutput yang Dihasilkan:
name : laravel/framework
descrip. : The Laravel Framework.
keywords : framework, laravel
versions : * v13.36.0
type : library
license : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : https://laravel.com
source : [git] https://github.com/laravel/framework.git e5626e38137cf0d82b1e52f15b16283e8442c13c
path : /home/z/my-project/work/laravel-sandbox/vendor/laravel/framework
autoload
files
psr-4
Illuminate\ => src/Illuminate/
Illuminate\Support\ => src/Illuminate/Macroable/, src/Illuminate/Collections/, src/Illuminate/Conditionable/, src/Illuminate/Reflection/(Output dipangkas pada beberapa bagian — antara lain names dan requires yang mendaftar puluhan dependency paket.) Baris versions : * v13.36.0 mengonfirmasi versi yang benar-benar terpasang, sedangkan bagian psr-4 memperlihatkan pemetaan autoload dari sisi paket: namespace Illuminate\ diarahkan ke folder src/Illuminate/ di dalam vendor — persis mekanisme yang dipakai framework untuk menemukan Illuminate\Support\Facades\Route. Panduan lengkap semua perintah Composer tersedia di getcomposer.org
, sedangkan alur composer create-project untuk memulai aplikasi Laravel dijelaskan di dokumentasi installation
Laravel.
Section Fondasi PHP untuk Laravel sampai di sini sudah lengkap: kita telah menyegarkan array, closure, OOP, namespace, exception, hingga Composer — seluruh kosakata untuk membaca kode Laravel dengan lancar. Selanjutnya kita bergerak ke persiapan lingkungan kerja dan menulis aplikasi pertama yang benar-benar berjalan.