Composer dengan repository lokal
Beberapa waktu lalu saya lagi ngerjain sebuah proyek Laravel. Nah, proyek ini butuh sebuah package internal yang kami kembangkan sendiri—semacam library kecil untuk komunikasi API. Biasanya, kami publish package itu ke GitHub lalu instal via Composer dengan private repository.
Tapi ada momen di mana saya belum siap publish ke mana-mana. Package itu masih berantakan, masih sering berubah. Saya hanya ingin bisa coba-coba package tersebut di proyek Laravel saya tanpa ribet harus push-pull ke repo.
Di sinilah akhirnya saya ketemu Composer path.
Awal mula kebingungan
Jadi ceritanya, saya punya dua folder:
/home/salim/projects/my-app
/home/salim/projects/my-package
my-app adalah aplikasi Laravel, sedangkan my-package adalah package lokal yang saya kembangkan. Saya ingin agar my-app bisa langsung pakai my-package, tanpa harus publish ke mana-mana.
Awalnya saya coba langsung pakai require di Composer:
composer require salim/my-package:dev-my-feature-123
Tapi tentu saja gagal, karena Composer nggak tahu package itu ada di mana.
Ketemu jalan: repository tipe path
Setelah utak-atik dokumentasi Composer, ternyata ada satu cara: repository tipe path.
Dengan ini, saya bisa bilang ke Composer: “Hei, kalau kamu butuh package salim/my-package, jangan cari di Packagist atau GitHub. Cari saja di folder sebelah sini.”
Caranya cukup tambahin konfigurasi di composer.json milik my-app. Kamu bahkan bisa menyetel version pura-pura yang kelak akan kamu rilis:
{
"repositories": [
{
"type": "path",
"url": "/home/salim/projects/my-package",
"options": {
"versions": {
"salim/my-package": "1.1.15"
}
}
}
],
"require": {
"salim/my-package": "1.1.15"
}
}
Lalu jalankan:
composer update salim/my-package
Composer langsung ngerti, dan package lokal saya otomatis terinstal.
Kelebihan yang berasa banget
Yang paling menyenangkan dari path ini adalah kita bisa langsung ngedit source code package tanpa perlu publish ulang. Composer akan melakukan symlink (kalau OS mendukung), jadi perubahan di folder my-package langsung terasa di my-app.
Misalnya saya nambahin method baru di MyService.php di my-package, dan… boom! langsung bisa dipakai di my-app.
Pelajaran yang saya dapat
Dari pengalaman ini, ada beberapa hal penting yang bisa jadi catatan:
-
Gunakan
pathuntuk eksperimen cepat.
Cocok kalau package masih sering berubah dan kamu nggak mau ribet publish. -
Ingat bahwa ini lokal.
Kalau sudah stabil, sebaiknya publish ke GitHub/Packagist atau repo internal biar bisa dipakai orang lain juga. -
Perhatikan symlink.
Composer biasanya bikin symlink, tapi kalau nggak memungkinkan, dia bakal copy file. Jadi kalau perubahan nggak langsung kerasa, kemungkinan besar symlink nggak jalan.
Penutup
Buat saya pribadi, Composer path ini kayak jalan pintas rahasia yang bikin workflow jauh lebih fleksibel. Rasanya seperti punya dapur eksperimen di rumah sendiri, sebelum akhirnya menyajikan hidangan yang rapi di meja makan orang lain.
Kalau kamu sering bikin package PHP untuk project internal, cobain deh. Siapa tahu ternyata fitur ini jadi penyelamat kamu juga.