Cara Membuat Laravel Packages

Langkah Mudah Membangun dan Mengelola Library Laravel Anda Sendiri

Auriga Aristo
Dipantry
4 min readFeb 18, 2024

--

Photo by Ben Griffiths on Unsplash

Berapa kali kamu membuat kodingan yang sama di setiap projectnya? Kalau kamu sering membuat microservice, kamu akan sering membuat kodingan helper atau utilities di setiap servicenya. Bagaimana kalau membuat library sendiri? Terkadang, ide ini bisa terasa menantang, terutama jika kamu baru mengenal dunia development.

Di dunia development, banyak developer yang telah membuat library sendiri, seperti Laravel sendiri yang diciptakan oleh sekelompok developer. Kamu bisa melihat berbagai library PHP di website Packagist. Di sini aku akan membimbingmu untuk membuat library Laravel sendiri.

Persiapan

Ketika membuat sebuah library, kamu memerlukan sebuah tools bernama composer. Tools yang sama dengan tools yang dibutuhkan untuk membuat project Laravel.

Untuk memulai, kamu bisa membuat folder terlebih dahulu. Nama folder ditentukan dari library apa yang akan kamu buat. Anggap kita membuat menjalankan command ini di terminal.

composer init

Di sana, composer akan memberikan panduan untuk membuat librarymu. Setiap nama library pasti memiliki format <vendor>/<package-name> . Vendor name biasanya merupakan Github username-mu, sedangkan package name adalah nama library-mu, biasanya package name sama dengan nama folder. Contoh: dipantry/rajaongkir

Selanjutnya, composer akan memintamu untuk menginput beberapa key untuk manajemen librarymu:

  • Description: deskripsi singkat tentang paket kamu. Ini seperti memberi tahu orang lain apa yang paketmu lakukan dalam satu atau dua kalimat.
  • Author: informasi tentang pembuat paket. Ini biasanya terdiri atas nama, email, dan terkadang URL website sebagai bentuk kredit. Kamu bisa memasukkan lebih dari satu author.
  • Minimum-stability: tingkat stabilitas minimum dari paket yang kamu izinkan untuk diinstall. Misalnya, jika kamu set minimum-stability ke dev, user bisa menginstall library dalam versi development. Value lainnya yaitu alpha, beta, RC(Release Candidate), dan stable.
  • Type: jenis paketmu. Inputan ini biasanya merupakan library untuk pustaka PHP standar, tapi bisa juga project untuk aplikasi/framework, atau jenis lain seperti wordpress-plugin atau laravel-package. Ini membantu Composer menangani librarymu dengan tepat.
  • License: menyatakan lisensi di bawah mana paketmu didistribusikan. Key ini penting untuk memberitahu user bagaimana mereka diizinkan untuk menggunakan packagemu. Contoh lisensi termasuk MIT, GPL-2.0-or-later, BSD-3-Clause, dll.
  • Require: daftar dependensi yang diperlukan oleh packagemu. Ini mencakup nama paket dan versi yang diperlukan. Jika packagemu akan menggunakan fungsi-fungsi pada Laravel, sebaiknya kamu menambah package illuminate/support.
  • Require-dev: mirip dengan require, tetapi key ini berisi dependensi yang hanya diperlukan untuk pengembangan. Ini bisa termasuk alat untuk testing, debugging, atau alat build. Daftar dependensi ini tidak akan diinstall saat packagemu digunakan oleh user lain.
  • Psr-4: bagian dari autoload, yang mendefinisikan bagaimana namespace dalam paketmu dipetakan ke struktur direktori sumber kode. Ini memungkinkan Composer untuk secara otomatis memuat kelas tanpa perlu require file secara manual. Misalnya, "Dipantry\\": "src/" berarti bahwa namespace Dipantry akan dipetakan ke direktori src/.

Setelah composer membuat packagemu, kamu akan melihat struktur folder dan file seperti gambar di bawah.

Struktur folder package

Pengembangan

Folder src di sini seperti folder app pada struktur folder Laravel, dimana setiap proses yang nantinya bisa dipakai oleh user, selalu berasal dari folder src ini. Kamu diperbolehkan membuat folder lain di luar folder src seperti config, database, resources, tests, dll. Namun, isi folder ini wajib memiliki format yang sama dengan format milik Laravel.

Contohnya, mari kita buat sebuah sebuah file bernama Random.php

Testing

Sebelum melakukan publikasi, sebaiknya kamu melakukan testing terlebih dahulu akan package yang kamu buat. Kamu bisa menggunakan phpunit untuk melakukan unit testing terhadap setiap method atau function. Cara menggunakannya dapat dimulai dengan menambahkan dependensi phpunit/phpunit pada require-dev. Lalu, kamu perlu membuat folder baru bernama tests untuk menaruh setiap test yang ada.

Contohnya, kamu bisa membuat file RandomTest.php dengan kode seperti di bawah.

Untuk menjalankan testing, kamu bisa menjalankan phpunit tersebut dengan konfigurasi phpunit tertentu. Pada root folder, kamu bisa menambahkan phpunit.xml.

Setelah menambahkan file phpunit.xml dan beberapa file testing, kamu bisa melakukan testing dengan cara memanggil command di bawah.

vendor/bin/phpunit

Setelah itu, phpunit akan memberikan informasi penggunaan memory, waktu testing, hingga test mana saja yang gagal. Jika kamu sudah merasa siap dan kodingan kamu sudah terbebas dari error, maka packagemu siap dipublikasikan.

Publikasi

Untuk mempublikasikan packagemu, prosesnya cukup mudah. Pertama, kamu perlu menyimpan packagemu ke dalam Git Repository, seperti Github. Sebaiknya, kamu mengkonfigurasi repositorymu menjadi public karena private repository memerlukan konfigurasi khusus untuk memasukkan package ke dalam Packagist.

Selanjutnya, kamu hanya perlu mengakses website packagist dan login ke akunmu. Selanjutnya pada header website terdapat tab bernama Submit dan masukkan link repository pada form yang muncul pada website tersebut.

Submit package di Packagist

Ketika selesai, kamu sudah bisa menggunakan packagemu di project lain dengan cara memanggil nama packagemu menggunakan command di bawah seperti memasukkan package lain ke dalam projectmu.

composer require dipantry/rajaongkir

Membuat paket Laravel mungkin terlihat seperti perjalanan yang panjang, namun setiap langkahnya memberikan pelajaran yang berharga. Ingat, di balik setiap baris kode, ada kesempatan untuk belajar dan berkontribusi pada komunitas yang lebih besar. Mari kita mulai petualangan ini bersama dan buatlah paket Laravel yang akan memudahkan pekerjaan banyak pengembang di luar sana. Semangat, dan selamat berkarya!

--

--

Auriga Aristo
Dipantry

4+ years in Backend Developer | PHP, Java/Kotlin, MySQL, Golang | New story every week