Composer membantu proyek PHP memakai library tanpa mengunduh dan merawat setiap dependency secara manual. Materi ini mengajak Anda mengenali cara kerjanya, membuat proyek kecil, lalu mencoba alur pemeliharaan dependency.
Apa itu Composer?
Composer adalah alat pengelola dependency untuk PHP. Anda menyebutkan library yang dibutuhkan proyek; Composer mencari kombinasi versi yang sesuai lalu memasangnya, termasuk dependency dari library tersebut.
Pengelolaannya berlaku per proyek. Karena itu, dua proyek dapat memakai versi library yang berbeda. Paket biasanya tersimpan dalam direktori vendor/. Packagist merupakan repositori utama untuk mencari paket Composer.
PHP tetap menjalankan aplikasi Anda. Composer mengurus kebutuhan library dan membantu menyediakan autoloader, bukan menggantikan runtime PHP.
Rujukan: Introduction dan Basic usage: Packagist.
Persiapan sebelum mencoba
Contoh berikut menggunakan PHP 8.2 atau versi 8.x yang lebih baru, Composer 2, dan Monolog 3. Kebutuhan PHP tersebut dipilih untuk latihan ini; jangan menganggapnya sebagai syarat minimum semua penggunaan Composer. Dokumentasi Monolog menyebutkan bahwa seri 3 memerlukan PHP 8.1 atau lebih baru.
Periksa PHP dan Composer di terminal:
php --version
composer --version
Jika Composer belum tersedia, ikuti panduan instalasi resmi. Di Windows tersedia installer yang menyiapkan PATH; setelah instalasi, buka terminal baru. Jika memakai instalasi lokal berupa composer.phar, ganti awalan composer pada contoh dengan php composer.phar dan sesuaikan lokasi filenya.
Rujukan tambahan: persyaratan Monolog.
Mengenal tiga bagian utama proyek
| Bagian | Kegunaan |
|---|---|
composer.json |
Menyatakan kebutuhan paket, batas versi, dan konfigurasi proyek. |
composer.lock |
Mencatat versi paket hasil resolusi dependency. |
vendor/ |
Menampung dependency yang dipasang beserta autoloader. |
Untuk aplikasi, simpan composer.json dan composer.lock di version control. Direktori vendor/ umumnya diabaikan melalui .gitignore karena dapat dibuat kembali melalui Composer.
Rujukan: Basic usage.
Praktik: proyek PHP kecil dengan Monolog
Kerjakan latihan di folder baru, bukan dengan mengganti composer.json aplikasi yang sedang Anda gunakan:
mkdir composer-demo
cd composer-demo
Buat composer.json berikut. Nama paket latihan belajar/composer-demo menggunakan pola vendor/nama-paket.
{
"name": "belajar/composer-demo",
"description": "Latihan dependency dan autoload Composer",
"type": "project",
"license": "MIT",
"require": {
"php": "^8.2",
"monolog/monolog": "^3.0"
},
"autoload": {
"psr-4": {
"Belajar\\": "src/"
}
},
"scripts": {
"demo": "@php app.php"
}
}
require berisi kebutuhan saat aplikasi berjalan. autoload.psr-4 menghubungkan namespace Belajar\ dengan folder src/. Dengan pemetaan ini, class Belajar\Salam berada di src/Salam.php. Dua backslash di dalam teks JSON merepresentasikan satu karakter backslash.
Rujukan: schema composer.json dan autoload PSR-4.
Apa arti tanda caret pada versi?
^3.0 menerima versi mulai 3.0.0 sampai sebelum 4.0.0, mengikuti aturan caret untuk rentang tersebut. Sementara itu, ^8.2 pada paket platform php berarti PHP mulai 8.2.0 sampai sebelum 9.0.0.
Rentang versi membatasi pilihan yang boleh diambil Composer; versi persis yang terpilih dicatat dalam lock file. Simbol caret bukan perintah untuk selalu memasang versi major terbaru.
Rujukan: Versions and constraints.
Pasang dependency
composer install
Pada latihan baru tanpa lock file, Composer menyelesaikan dependency dan membuat composer.lock. Setelah proses selesai, folder vendor/ tersedia.
Buat folder src, kemudian simpan kode berikut sebagai src/Salam.php:
<?php
namespace Belajar;
final class Salam
{
public function untuk(string $nama): string
{
return 'Halo, '.$nama.'! Composer sudah bekerja.';
}
}
Buat app.php di sebelah composer.json:
<?php
use Belajar\Salam;
use Monolog\Handler\StreamHandler;
use Monolog\Level;
use Monolog\Logger;
require __DIR__.'/vendor/autoload.php';
$logger = new Logger('latihan');
$logger->pushHandler(new StreamHandler(__DIR__.'/app.log', Level::Info));
$pesan = (new Salam)->untuk('Pembaca');
$logger->info($pesan);
echo $pesan.PHP_EOL;
Jalankan:
php app.php
Terminal akan menampilkan Halo, Pembaca! Composer sudah bekerja. dan Monolog menulis pesan ke app.log. File tersebut berada di folder latihan; pastikan foldernya dapat ditulis.
Contoh ini mempertemukan class buatan sendiri dengan library pihak ketiga melalui satu autoloader. Anda tidak perlu memasukkan file class satu per satu memakai require.
Pola penggunaan logger merujuk pada dokumentasi resmi Monolog, sedangkan autoloader merujuk pada Composer: Autoloading.
Menjalankan script proyek
Konfigurasi scripts.demo tadi menyediakan jalan pintas:
composer run-script demo
Awalan @php memakai executable PHP yang menjalankan Composer. Script ini menjalankan app.php, sehingga hasilnya sama dengan percobaan sebelumnya.
Rujukan: Scripts.
Perbedaan install, update, dan require
| Perintah | Kapan dipakai |
|---|---|
composer install |
Menyiapkan dependency; jika lock file tersedia, memakai versi yang tercatat di sana. |
composer update |
Menghitung ulang dependency sesuai batas versi dan memperbarui lock file. |
composer update monolog/monolog |
Meminta pembaruan terarah untuk paket tersebut. Konflik dependency tetap dapat terjadi. |
composer require monolog/monolog:^3.0 |
Menambahkan atau mengubah kebutuhan paket melalui CLI. |
Setelah mengambil proyek aplikasi dari Git, biasanya jalankan install. Gunakan update ketika Anda memang ingin memperbarui dependency, lalu tinjau perubahan dan uji aplikasinya.
Untuk tool pengembangan, tersedia opsi --dev pada require; kebutuhannya masuk ke require-dev. Jangan memasukkan library yang diperlukan aplikasi produksi hanya ke kelompok pengembangan.
Rujukan: Basic usage: install dan update serta CLI: require.
Pemeriksaan yang berguna sehari-hari
composer validate --strict
composer show monolog/monolog
composer outdated
composer audit
composer check-platform-reqs
validate --strictmemeriksa konfigurasi dan memperlakukan peringatan sebagai kegagalan validasi.showmenampilkan informasi paket yang terpasang.outdatedmembantu melihat paket yang memiliki pembaruan.auditmemeriksa temuan keamanan dependency; hasil bersih bukan jaminan bahwa seluruh aplikasi aman.check-platform-reqsmemeriksa kecocokan PHP dan ekstensi aktual dengan kebutuhan paket terpasang.
Setelah mengubah pemetaan autoload, jalankan composer dump-autoload. Dengan pemetaan PSR-4 biasa yang sudah benar, menambahkan class baru ke folder tersebut tidak memerlukan regenerasi autoloader setiap kali.
Rujukan: CLI Composer dan schema autoload.
Jika terjadi error
Mulai dengan membaca pesan dependency yang bertentangan dan menjalankan:
composer diagnose
Jika PHP atau ekstensi tidak memenuhi kebutuhan, periksa lingkungan PHP CLI yang benar-benar dipakai. Jika class tidak ditemukan, cocokkan namespace, nama file, dan pemetaan folder; perbedaan huruf besar-kecil juga perlu diperhatikan.
Jangan langsung menghapus lock file atau menonaktifkan pemeriksaan platform untuk menyembunyikan masalah. Identifikasi penyebabnya dahulu agar lingkungan pengembangan dan server tetap dapat menjalankan dependency yang sama.
Rujukan: Troubleshooting Composer.
Latihan lanjutan
- Ganti nama
Pembacadiapp.php, lalu jalankan ulang programnya. - Tambahkan class baru di namespace
Belajardan panggil melalui autoloader. - Baca versi Monolog yang benar-benar terpasang melalui
composer show monolog/monolog. - Periksa hubungan antara kebutuhan pada
composer.jsondan versi paket dalamcomposer.lock.
Materi dan contoh diperiksa terhadap dokumentasi pada 4 November 2026. Contoh ditujukan untuk folder latihan tersendiri; opsi CLI dan kompatibilitas paket tetap perlu dicocokkan dengan versi yang Anda gunakan.