Ekosistem Laravel memuat puluhan ribu package pihak ketiga yang kualitasnya tidak seragam, sedangkan setiap package yang diadopsi menjadi bagian dari composer.lock dan ikut dipelihara sepanjang umur aplikasi. Topik ini menyusun empat kelompok kriteria untuk menilai sebuah package sebelum diadopsi dan mempraktikkan pemeriksaannya dengan perintah Composer yang membaca metadata. Seluruh pemeriksaan berjalan tanpa memasang package, sehingga penilaian selesai terlebih dahulu dan keputusan pemasangan mengikutinya.
Kompatibilitas dengan versi framework#
Kriteria pertama adalah kesesuaian rentang versi. Bagian requires pada metadata package menyatakan versi PHP dan versi komponen illuminate/* yang diterimanya, dan rentang tersebut harus mencakup versi framework proyek. Apabila rentang requires sebuah package berhenti pada ^11.0, package tersebut tidak dapat dipasang pada proyek Laravel 13, dan Composer menolak resolusinya. Pemeriksaan ini sudah dapat dilakukan pada saat membaca metadata, misalnya rentang illuminate/queue yang mencantumkan ^13.0 pada package Horizon.
Kesesuaian itu dapat diuji pada proyek sungguhan tanpa mengadopsi apa pun. Perintah composer require dengan opsi --dry-run menyelesaikan resolusi dependensi seperti biasa, tetapi tidak mengubah composer.json, composer.lock, maupun direktori vendor. Blok berikut tidak dieksekusi ulang pada contoh ini, dan keluarannya diambil dari eksekusi nyata pada aplikasi catatan.
# tidak-dijalankan
# menguji kompatibilitas package tanpa mengadopsinya
cd ~/aplikasi-catatan
composer require laravel/horizon --dry-runKeluaran lengkapnya adalah sebagai berikut.
./composer.json has been updated
Running composer update laravel/horizon
Loading composer repositories with package information
Updating dependencies
Lock file operations: 2 installs, 0 updates, 0 removals
- Locking laravel/horizon (v5.50.1)
- Locking laravel/sentinel (v1.1.0)
Installing dependencies from lock file (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
- Installing laravel/sentinel (v1.1.0)
- Installing laravel/horizon (v5.50.1)
2 package suggestions were added by new dependencies, use `composer suggest` to see details.
81 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.
Using version ^5.50 for laravel/horizonKeluaran tersebut memperlihatkan tiga hal yang relevan untuk penilaian. Resolusi diterima, yang berarti tidak ada konflik versi dengan framework dan package yang sudah ada. Jumlah instalasinya diketahui lebih dahulu, yaitu dua package, sehingga ukuran adopsinya terukur. Baris terakhir menyatakan kendala yang akan ditulis ke composer.json, yaitu ^5.50, yang berarti peningkatan mayor package di kemudian hari membutuhkan keputusan terpisah.
Keterpeliharaan dan siklus rilis#
Kriteria kedua adalah bukti bahwa package masih dipelihara. Package yang tidak lagi menerima rilis akan tertinggal setiap kali framework menaikkan versinya, dan lama-kelamaan menjadi penghalang peningkatan. Sinyalnya terbaca dari metadata yang sama, yaitu daftar versions yang memperlihatkan ritme rilis, serta nomor rilis terbaru yang menyertakan rentang versi framework terkini. Package dengan riwayat rilis yang panjang dan rentang illuminate/* yang telah memuat ^13.0 menunjukkan pemeliharaan yang mengikuti perkembangan framework.
Pemeriksaan manual yang melengkapi metadata meliputi membaca changelog, mengamati tanggal rilis terakhir, dan meninjau kebijakan versi yang ditulis pengembangnya. Tanggal rilis terakhir yang lama belum tentu buruk apabila package dianggap stabil, tetapi kombinasi rentang framework yang tua dengan tidak adanya rilis baru adalah sinyal yang paling sering menyesatkan, karena package tampak aktif sementara dukungannya sudah berhenti.
Jejak dependensi yang dibawa#
Kriteria ketiga adalah beban yang dibawa package itu sendiri, baik dependensi wajib pada requires maupun pilihan opsional pada suggests. Sebuah meta-package dapat membawa banyak komponen sekaligus, sedangkan package yang fokus pada satu fungsi biasanya hanya membutuhkan beberapa komponen illuminate/*. Penilaiannya bukan mencari package dengan dependensi paling sedikit, melainkan memastikan kejelasan tentang apa yang masuk ke dalam proyek dan untuk apa.
Inventaris dependensi proyek yang sedang berjalan diperiksa dengan composer show --direct, yang mendaftar package yang dinyatakan langsung pada composer.json. Blok berikut tidak dieksekusi ulang, dan keluarannya diambil dari aplikasi catatan.
# tidak-dijalankan
# mendaftar dependensi langsung proyek
cd ~/aplikasi-catatan
composer show --directfakerphp/faker 1.24.1 Faker is a PHP library that generates fake dat...
laravel/framework 13.40.0 The Laravel Framework.
laravel/pail 1.2.7 Easily delve into your Laravel application's l...
laravel/pao 1.1.5 Agent-optimized output for PHP testing tools
laravel/pint 1.32.1 An opinionated code formatter for PHP.
laravel/sanctum 4.3.3 Laravel Sanctum provides a featherweight authe...
laravel/tinker 3.0.2 Powerful REPL for the Laravel framework.
mockery/mockery 1.6.15 Mockery is a simple yet flexible PHP mock obje...
nunomaduro/collision 8.9.5 Cli error handling for console/command-line PH...
phpunit/phpunit 12.5.43 The PHP Unit Testing framework.Daftar tersebut adalah inventaris yang wajib dijaga tetap kecil, karena setiap barisnya adalah kewajiban yang dipelihara secara langsung. Sementara itu, dependensi transitif yang terbawa tanpa dinyatakan langsung dilacak dengan composer why, yaitu perintah yang menjelaskan mengapa sebuah package hadir.
# tidak-dijalankan
# menelusuri asal sebuah dependensi transitif
cd ~/aplikasi-catatan
composer why psr/containerfakerphp/faker v1.24.1 requires psr/container (^1.0 || ^2.0)
laravel/framework v13.40.0 requires psr/container (^1.1.1 || ^2.0.1)
symfony/service-contracts v3.7.3 requires psr/container (^1.1|^2.0) Keluaran tersebut memperlihatkan bahwa psr/container tidak pernah dinyatakan langsung, melainkan dibawa oleh tiga package sekaligus. Bentuk penelusuran semacam ini berguna saat menilai adopsi, karena kandidat yang tampak sederhana dapat membawa rantai dependensi yang panjang, dan composer why pada package yang sudah masuk membantu menjelaskan bobot sebenarnya.
Dokumentasi, lisensi, dan sinyal pengujian#
Kriteria keempat adalah mutu di sekeliling kodenya. Lisensi terbaca dari metadata, misalnya baris license yang menyatakan MIT pada keempat package yang dibahas pada modul ini, dan lisensinya menentukan kebebasan menggunakan serta mendistribusikan ulang. Dokumentasi yang memuat contoh penggunaan, panduan pembaruan, dan penjelasan konfigurasi mempercepat adopsi dan mengurangi risiko penggunaan yang keliru. Sinyal pengujian terbaca pada bagian requires (dev), karena kehadiran phpunit, pest, atau orchestra/testbench menunjukkan package tersebut diuji pada beberapa versi framework sebelum dirilis.
Kelompok kriteria ini sebaiknya dibaca bersama ukuran adopsi yang tercantum pada halaman package di packagist.org, seperti jumlah unduhan dan pengguna. Angka tersebut bukan jaminan mutu, tetapi membedakan package yang menjadi standar de facto dari package yang digunakan segelintir proyek, dan keduanya menuntut tingkat kewaspadaan yang berbeda.
Alur putusan adopsi#
Keempat kelompok kriteria itu dikerjakan berurutan, dan setiap tahap yang gagal menghentikan proses sebelum pemasangan.
Apabila seluruh tahap lolos, adopsi tetap dilakukan pada cabang terpisah dengan komit tunggal yang hanya memuat perubahan composer.json, composer.lock, dan penyesuaian kode yang diperlukan. Dengan cara itu, dampak adopsi mudah ditinjau dan dilepas jika ternyata tidak sesuai.
Ringkasan#
- Kompatibilitas dibaca dari rentang
illuminate/*dan versi PHP pada metadata, lalu diuji tanpa efek samping dengancomposer require --dry-run. - Keterpeliharaan dinilai dari ritme rilis dan rentang versi framework yang menyertai rilis terbaru.
- Jejak dependensi diperiksa dengan
composer show --directuntuk inventaris langsung dancomposer whyuntuk menelusuri dependensi transitif. - Lisensi, dokumentasi, dan sinyal pengujian pada
requires (dev)melengkapi penilaian, dan adopsi yang lolos dilakukan pada cabang terpisah.
Referensi#
- Composer CLI — Composer
— Dokumentasi perintah
show,why, dan opsi--dry-runyang dipakai pada seluruh pemeriksaan topik ini. - Basic usage — Composer
— Dokumentasi
composer.json,composer.lock, dan resolusi dependensi yang menjadi dasar penilaian.