Logo AnwarFauzi 空Anwar Fauzi
Portofolio / 2026
Menu
← Semua tulisan
Materi Web3 menit baca

Apa Itu Composer? Panduan dan Contoh Penggunaan untuk Pemula

Kenali Composer, composer.json, lock file, autoload PSR-4, serta praktik membuat proyek PHP dengan rujukan dokumentasi resmi.

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 --strict memeriksa konfigurasi dan memperlakukan peringatan sebagai kegagalan validasi.
  • show menampilkan informasi paket yang terpasang.
  • outdated membantu melihat paket yang memiliki pembaruan.
  • audit memeriksa temuan keamanan dependency; hasil bersih bukan jaminan bahwa seluruh aplikasi aman.
  • check-platform-reqs memeriksa 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

  1. Ganti nama Pembaca di app.php, lalu jalankan ulang programnya.
  2. Tambahkan class baru di namespace Belajar dan panggil melalui autoloader.
  3. Baca versi Monolog yang benar-benar terpasang melalui composer show monolog/monolog.
  4. Periksa hubungan antara kebutuhan pada composer.json dan versi paket dalam composer.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.