Dependency Management for Modern PHP
Mengapa kita butuh Dependency Manager?
Dulu, jika kita ingin menggunakan library pihak ketiga (misal: PHPMailer, FPDF), kita harus:
require atau include.Masalah muncul ketika:
Sangat sulit dikelola!
Composer adalah alat untuk manajemen dependensi di PHP. Ia memungkinkan Anda mendeklarasikan library yang dibutuhkan project Anda, dan Composer akan mengelola (menginstal/mengupdate) library tersebut untuk Anda.
Cara Kerja & Instalasi
Packagist adalah repositori utama untuk paket-paket PHP. Composer secara default mencari library di sini.
Ada ribuan library siap pakai: Laravel, Symfony, Guzzle, Monolog, dll.
Composer adalah file executable composer.phar.
# Cek instalasi
composer --version
Pastikan PHP sudah terinstall di komputer Anda.
Gunakan perintah init untuk membuat file konfigurasi composer.json.
mkdir my-project
cd my-project
composer init
File ini adalah "jantung" dari project Anda. Berisi metadata project dan daftar dependensi.
{
"name": "ahmad/my-project",
"require": {
"monolog/monolog": "^2.0"
}
}
Gunakan perintah require untuk menambah library baru.
composer require guzzlehttp/guzzle
Perintah ini akan:
composer.json.vendor/.composer.lock.Semua library yang didownload Composer akan disimpan di folder vendor/.
JANGAN PERNAH mengedit file di dalam folder vendor!
Dan jangan lupa masukkan vendor/ ke dalam .gitignore.
File ini mencatat versi eksak dari setiap library yang terinstall.
Ini menjamin bahwa setiap orang di tim Anda menggunakan versi library yang SAMA PERSIS.
Commit file ini ke Git!
| Perintah | Fungsi |
|---|---|
composer install |
Menginstall dependensi sesuai file composer.lock (jika ada). Digunakan saat
deploy atau clone project baru. |
composer update |
Mencari versi terbaru library sesuai constraint di composer.json, lalu update
composer.lock.
|
Selamat Tinggal `require` Manual
Tanpa autoloading, kita harus menulis ini di setiap file:
require_once 'User.php';
require_once 'Product.php';
require_once 'Database.php';
// ... capek kan?
Mekanisme di mana PHP otomatis memuat class saat class tersebut dibutuhkan (di-instansiasi).
Composer menyediakan autoloader yang sangat canggih.
Cukup include satu file saja di entry point aplikasi Anda (misal
index.php).
require __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
// Class Logger otomatis dimuat!
$log = new Logger('name');
Standar Autoloading Modern
PSR-4 adalah standar rekomendasi dari PHP-FIG yang memetakan Namespace ke Struktur Folder.
Tujuannya agar struktur file rapi dan prediktif.
Namespace prefix dipetakan ke base directory tertentu.
App\ src/
Artinya:
App\User ada di file src/User.phpApp\Controllers\HomeController ada di file
src/Controllers/HomeController.php
Tambahkan bagian autoload di composer.json.
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
Setiap kali mengubah konfigurasi autoload di composer.json, Anda harus menjalankan perintah:
composer dump-autoload
Ini akan men-generate ulang file vendor/autoload.php.
Fitur Lanjutan
Ada library yang hanya dibutuhkan saat development (testing, debugging), tapi tidak di production.
Gunakan flag --dev.
composer require --dev phpunit/phpunit
Composer bisa menjalankan script atau command line custom.
"scripts": {
"test": "phpunit",
"start": "php -S localhost:8000 -t public"
}
Jalankan dengan: composer test
Untuk library lama yang tidak menggunakan namespace, kita bisa menggunakan classmap.
"autoload": {
"classmap": ["lib/", "legacy/file.php"]
}
Composer akan memindai folder tersebut dan membuat peta semua class yang ada.
Untuk memuat file helper yang berisi fungsi (bukan class).
"autoload": {
"files": ["src/helpers.php"]
}
File ini akan selalu di-load di setiap request.
Cara menentukan versi library yang diinginkan:
1.0.2: Versi eksak.^1.0: (Caret) Update aman (1.0.0 s/d <2.0.0). Paling sering dipakai.~1.0: (Tilde) Update patch level (1.0.0 s/d <1.1.0).< /li>
*: Versi apapun (Bahaya!).Composer otomatis mengecek apakah versi PHP server memenuhi syarat library.
Jika server pakai PHP 7.4 tapi library butuh PHP 8.0, composer install akan gagal (menjaga
keamanan).
Di production, gunakan flag -o atau --optimize-autoloader saat dump-autoload
untuk performa maksimal.
composer dump-autoload -o
Tips Menggunakan Composer
Selalu commit composer.lock ke version control (Git) jika Anda membuat Aplikasi (Project).
Jika Anda membuat Library, biasanya composer.lock di-ignore.
Sekali lagi, jangan pernah mengubah kode di dalam folder vendor/. Perubahan Anda akan hilang
saat update.
Jika butuh modifikasi, extend class-nya atau gunakan pattern Decorator.
Lakukan composer update secara berkala di development untuk mendapatkan bug fix dan fitur
baru, lalu test aplikasi Anda.
Pahami SemVer (Major.Minor.Patch).
composer.json untuk konfigurasi dan composer.lock untuk
konsistensi versi.Happy Composing!