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:

Submit Page

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:

Project Submitted

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.

Hello World!

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.

Tombol Update

Setelah update selesai, kamu akan melihat versi baru sesuai dengan tag yang kita buat ditambahkan pada bagian sebelah kanan halaman package.

Tombol Update

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…

comments powered by Disqus
Lightbox