Halo… Selamat datang kembali di blog Ruang Developer. Pada kesempatan kali ini kita akan belajar bagaimana cara membuat dan mempublikasikan composer project di packagist. Jika kamu belum mengetahui apa itu composer, kamu bisa baca postingan tentang apa itu composer terlebih dahulu ya.
Untuk mengikuti tutorial ini, pastikan kamu sudah menginstal composer di komputer kesayangan kamu. Jika belum, kamu bisa mengikuti langkah menginstall composer di sini.
Membuat Composer Project
Untuk membuat composer project, kamu bisa jalankan perintah composer init. Buatlah sebuah folder baru di komputer kamu kemudian buka folder tersebut di terminal kesayangan kamu dan jalankan perintah berikut ini:
composer init
Setelah menjalankan perintah tersebut, kamu akan diminta untuk mengatur beberapa konfigurasi, diantaranya sebagai berikut:
1. Package Name
Ini adalah nama untuk package kamu di packagist. Nama package terdiri dari dua bagian yaitu nama vendor dan nama package, dipisahkan dengan garis miring. contohnya seperti berikut:
ruangdeveloper/belajar-publish-project
Dari kode tersebut: ruangdeveloper adalah nama vendor, sedangkan belajar-publish-project adalah nama package. Saat pertama kali mempublikasikan package, kamu harus memilih nama vendor yang belum ada di packagist. Jika secara kebetulan nama vendor yang kamu inginkan telah digunakan dan dipublish ke packagist, kamu memiliki dua pilihan yaitu mencari nama yang lain atau menjadi maintainer dari salah satu package yang dimiliki oleh vendor tersebut.
2. Description
Ini adalah deskripsi singkat untuk package kamu di packagist. Saat membuat package sungguhan dan ingin serius digunakan, kamu harus memberi deskripsi yang sesuai dengan project yang kamu buat ya.
3. Author
Ini adalah informasi author untuk package kamu di packagist. Berisi nama dan alamat email dengan contoh format seperti berikut ini:
ruangdeveloper <[email protected]>
4. Minimum Stability
Minimum stability digunakan untuk memfilter package yang akan kamu install sebagai dependency saat membuat project. Nilai defaultnya adalh stable
. Semua package di composer yang stabilitynya kurang dari minimum stability project kamu akan diabaikan ketika kamu melakukan installasi dependency.
5. Package Type
Ini adalah informasi yang memberitahu tipe apa project yang sedang kamu buat. Contohnya library, project, metapackage, atau composer-plugin.
6. License
Ini adalah lisensi untuk project yang sedang kamu buat. Kamu bisa memilih ISC, MIT, atau lisensi yang lainnya sesuai keinginan kamu.
Selain konfigurasi-konfigurasi tersebut, kamu juga akan ditanyakan apakah ingin menambahkan dependencies dan dev dependencies untuk project kamu, serta konfigurasi namespace untuk PSR-4 autoload mapping.
Berikut ini adalah konfigurasi yang saya lakukan ketika init composer project.
Package name (<vendor>/<name>) [rizky/belajar-publish-project]: ruangdeveloper/belajar-publish-project
Description []: Tutorial membuat dan mempublish composer project
Author [kykurniawan <[email protected]>, n to skip]: ruangdeveloper <[email protected]>
Minimum Stability []: stable
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
License []: MIT
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
Add PSR-4 autoload mapping? Maps namespace "RuangDeveloper\BelajarPublishProject" to the entered relative path. [src/, n to skip]: src/
Setelah inisialisasi project selesai, dalam folder kamu akan terdapat sebuah file bernama package.json
yang berisi kode kurang lebih seperti berikut ini:
{
"name": "ruangdeveloper/belajar-publish-project",
"description": "Tutorial membuat dan mempublish composer project",
"type": "library",
"license": "MIT",
"autoload": {
"psr-4": {
"RuangDeveloper\\BelajarPublishProject\\": "src/"
}
},
"authors": [
{
"name": "ruangdeveloper",
"email": "[email protected]"
}
],
"minimum-stability": "stable",
"require": {}
}
Selain itu juga akan ada folder kosong bernama src
. Di folder src
inilah kita akan meletakkan kode php kita. Ada juga folder bernama vendor
yang berisi dependencies untuk project yang kita gunakan.
Lanjut…
Setelah inisialisasi selesai, kita akan buat kode sederhana sebagai sample project kita. Dalam folder src
, buatlah sebuah file php bernama Main.php
. Kamu juga bisa menggunakan nama file lainnya.
Isi file Main.php
<?php
namespace RuangDeveloper\BelajarPublishProject;
class Main
{
public function getHello()
{
return "Hello World!";
}
}
Di dalam folder tersebut kita membuat kelas php sederhana bernama Main
yang di dalamnya terdapat satu buah method bernama getHello
yang akan mengembalikan teks Hello World!.
Yang harus kamu perhatikan adalah namespace yang kita gunakan. Pada kode tersebut kita menggunakan namespace seperti ini:
namespace RuangDeveloper\BelajarPublishProject;
Darimana namespace ini kita dapatkan? Dari konfigurasi autoload PSR-4 di file composer.json
"autoload": {
"psr-4": {
"RuangDeveloper\\BelajarPublishProject\\": "src/"
}
},
Pada konfigurasi tersebut kita menggunakan namespace untuk mapping ke folder src
, sehingga file php kita yang ada di dalam folder src
harus memiliki awalan namespace yang sama agar composer bisa melakukan autoload.
Untuk lebih memudahkan, biasanya namespace akan disesuaikan dengan lokasi file dalam folder src
. Sebagai contoh, jika kamu memiliki file yang berada dalam folder src/app/configs, maka kamu bisa menggunakan namespace sebagai berikut:
namespace RuangDeveloper\BelajarPublishProject\App\Configs;
Mempublikasikan Composer Project
Setelah project kita selesai, langkah selanjutnya adalah mempublikasikan project kita ke packagist. Untuk mempublikasikan project di packagist, kamu harus membuat akun terlebih dahulu. Jika kamu belum memiliki akun, silahkan buat dulu yaa… kita tidak akan bahas tutorial pembuatan akunnya di sini.
Selain akun packagist, kita juga harus menyimpan project kita sebagai repository di version control seperti GitHub atau GitLab. Pada tutirial ini, saya menggunakan GitHub untuk menyimpan projectnya.
Note: Jangan lupa untuk membuat file .gitignore untuk menghindari folder vendor di project ikut terupload ke GitHub.
Lanjut…
Setelah project berada di github. Silahkan login ke website packagist, kemudian klik menu submit di navbar sehingga masuk ke halaman berikut:
Pada kolom input Repository URL, silahkan masukkan url repository project kamu yang ada di GitHub, kemudian klik Check.
Jika tidak ada masalah pada nama vendor yang kamu gunakan, akan muncul tombol Submit. Klik tombol tersebut untuk lanjut mempublikasikan project.
Jika sudah selesai mempublish kamu akan dialihkan ke halaman package seperti berikut ini:
Kamu akan melihat warning yang memberitahu bahwa auto-update package tidak aktif. Auto-update berfungsi untuk memperbarui package secara otomatis ketika terjadi perubahan di repository GitHub. Kamu bisa mengaktifkannya dengan cara memngikuti langkah yang diberikan pada link yang tersedia.
Mencoba Menggunakan Package
Setelah selesai mempublikasikan composer project menjadi sebuah package, langkah selanjutnya kita akan mencoba untuk menggunakan package tersebut.
Buatlah sebuah project composer baru dengan cara yang kurang lebih sama seperti sebelumnya. Kamu bisa menggunakan nama project yang berbeda untuk membedakan namespace.
Setelah project dibuat, buka folder project di terminal kesayangan kamu dan install package yang telah dipublish dengan perintah berikut ini.
composer require ruangdeveloper/belajar-publish-project:dev-main
Note: Sesuaikan dengan nama vendor dan nama package yang sudah kamu publish ya. :dev-main pada akhir nama package adalah versi yang ada di packagist. Untuk saat ini kamu harus menuliskannya karena package yang kita publish masih versi development. Kita akan bahas lebih lanjut pada bagian berikutnya.
Berikut ini adalah proses install package
$ composer require ruangdeveloper/belajar-publish-project:dev-main
./composer.json has been updated
Running composer update ruangdeveloper/belajar-publish-project
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking ruangdeveloper/belajar-publish-project (dev-main f68e1f7)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Downloading ruangdeveloper/belajar-publish-project (dev-main f68e1f7)
- Installing ruangdeveloper/belajar-publish-project (dev-main f68e1f7): Extracting archive
Generating autoload files
Setelah package selesai diinstall, dalam folder src
project kamu saat ini buatlah sebuah file bernama index.php atau kamu bisa menggunakan nama lainnya. Tulislah kode dalam file tersebut kurang lebih seperti ini:
<?php
use RuangDeveloper\BelajarPublishProject\Main;
require_once "../vendor/autoload.php";
$main = new Main;
echo $main->getHello();
Setelah itu, jalankan file index.php melalui terminal dengan cara masuk ke folder src dan jalankan peritah berikut ini.
$ php index.php
Output:
Hello World!
Kamu juga bisa mencobanya melalui browser jika folder kamu berada di dalam document root apache seperti htdocs.
Membuat Versi Package Menggunakan Tag
Package yang kita publish masih menggunakan versi development. Ini akan menyulitkan kita untuk menginstall package yang berada di versi development ke dalam project dengan minimum stabilitynya stable. Oleh karena itu kita akan merilis versi pertama untuk package kita.
Buatlah sebuah tag baru dengan nama tag v1.0.0 di repository project. Kamu bisa melakukannya melalui terminal di komputer lokal kemudian push perubahannya atau bisa langsung membuatnya melalui website GitHub.
Untuk melakukannya melalui terminal kamu bisa ikuti perintah berikut ini:
Membuat tag
git tag -a v1.0.0 -m "Initial Version"
Mempublish tag
git push origin v1.0.0
Setelah perintah tersebut dijalankan, akan ada tag baru di repository GitHub kita. Kamu bisa memastikannya dengan membuka repository GitHub dan lihat pada bagian release.
Setelah menambahkan tag, langkah selanjutnya adalah mengupdate package kita di packagist. Caranya tinggal klik tombol update yang ada di halaman package.
Setelah update selesai, kamu akan melihat versi baru sesuai dengan tag yang kita buat ditambahkan pada bagian sebelah kanan halaman package.
Sekarang kamu bisa menginstall package tanpa menambahkan keyword dev-main karena composer akan secara otomatis menggunakan versi terbaru kita yaitu v1.0.0
$ composer require ruangdeveloper/belajar-publish-project
Info from https://repo.packagist.org: #StandWithUkraine
Using version ^1.0 for ruangdeveloper/belajar-publish-project
./composer.json has been updated
Running composer update ruangdeveloper/belajar-publish-project
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking ruangdeveloper/belajar-publish-project (v1.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing ruangdeveloper/belajar-publish-project (v1.0.0): Extracting archive
Generating autoload files
Kamu bisa membuktikannya dengan cara melihat file package.json
.
"require": {
"ruangdeveloper/belajar-publish-project": "^1.0"
}
Akhirnya…
Selamat! Sekarang kamu sudah bisa membuat dan mempublikasikan composer project milik kamu sendiri di packagist. Selanjutnya kamu bisa mencoba untuk membuat package yang bermanfaat baik itu untuk project yang kamu buat ataupun untuk project orang lain. Kamu bisa belajar mengelola project open source milik kamu sendiri dan mengajak orang lain untuk ikut berkontribusi.
Sampai jumpa…