PHP: Pengenalan kepada Composer

Tagged as: ,

Composer adalah tools untuk mendapatkan dependencies bagi projek PHP anda. Sebelum Composer, jika anda ingin menggunakan sebarang library luar, anda perlu download ia terlebih dahulu, unzip (jika dalam bentuk archive), dan kemudian copy ke folder projek anda. Bagaimana pula jika library tersebut turut bergantung kepada library lain ? Ulang semula proses sebelum ini.

Terlebih dahulu anda perlu install composer. Ia boleh dilakukan melalui command berikut:-

curl -sS https://getcomposer.org/installer | php

Anda akan mendapat output seperti berikut:-

#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: /home/kamal/php/myshop/composer.phar
Use it: php composer.phar

Seterusnya, untuk men’download’ library yang anda inginkan, bina fail bernama composer.json seperti berikut:-

{
    "require": {
        "swiftmailer/swiftmailer": "5.3.1"
    }
}

Kemudian, jalankan arahan berikut:-

php composer.phar install

Anda akan mendapat output lebih kurang seperti berikut apabila selesai:-

Perhatikan satu folder baru bernama vendor dibina. Ia akan mengandungi kesemua code yang di'download' melalui composer.
 

Setelah composer selesai download, anda boleh mula menggunakan library tersebut dalam script PHP anda dengan hanya menambah baris berikut:-

<?php
require 'vendor/autoload.php';

Contohnya, bina fail baru bernama mail.php seperti berikut:-

<?php
require 'vendor/autoload.php';

$transport = Swift_SmtpTransport::newInstance('127.0.0.1', 25);
$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance('Wonderful Subject')
  ->setFrom(array('[email protected]' => 'John Doe'))
  ->setTo(array('[email protected]'))
  ->setBody('Here is the message itself')
  ;

$result = $mailer->send($message);

Dan anda boleh jalankannya melalui php mail.php dan email akan dihantar.

Lock file

Jika anda perasan, setelah selesai menjalankan arahan composer install, satu fail baru bernama composer.lock akan dijana oleh composer. Fail ini berfungsi untuk merekodkan version sebenar libraries yang di’install’ oleh composer. Ini kerana composer.json mungkin ditulis seperti berikut:-

{
    "require": {
        "swiftmailer/swiftmailer": "5.3.1",
        "symfony/yaml": "~2.5"
    }
}

Dalam spesifikasi composer.json di atas, versi untuk swiftmailer ditulis secara spesifik manakala versi untuk symfony/yaml ditulis dalam format julat tertentu. ~2.5 adalah bersamaan dengan >=2.5 < 3.0. Bila composer install dijalankan buat pertama kali (composer.lock masih belum wujud), maka ia akan cuba mendapatkan versi terkini yang ada pada masa tersebut, mengikut julat yang ditetapkan.

Ini bermakna, jika developer A menjalankan composer install dan mendapat version symfony/yaml 2.5.1 dan kemudian version baru dikeluarkan, developer B menjalankan composer install beberapa hari kemudian, dia mungkin akan mendapat version 2.5.2. Ini menyebabkan perbezaan kod yang diperolehi oleh developer A dan B yang mungkin akan menyebabkan kekeliruan. Jadi composer.lock akan merekodkan version sebenar yang diperolehi oleh composer semasa ia pertama kali dijalankan dan composer.install seterusnya akan merujuk kepada spesifikasi yang terkandung dalam composer.lock.

Jadi amat penting sekali untuk composer.lock disertakan sekali ke dalam version control system yang anda gunakan.

Isu

Setelah beberapa ketika, anda mungkin perlu mengemaskini kesemua packages jika ada versi terbaru dikeluarkan oleh pembangun masing-masing. Boleh gunakan arahan composer update. Bagaimana pun pastikan anda menjalankan arahan composer update semasa berada di dalam direktori yang sama mengandungi file package.json.

Rujukan

  • https://getcomposer.org/doc/01-basic-usage.md#package-versions
  • https://blog.engineyard.com/2014/composer-its-all-about-the-lock-file (terima kasih kepada Mior Muhammad Zaki).
Written on April 1, 2016 by kamal
About author

Lead Engineer at Xoxzo Inc. Develop web applications in Python/Django. Interested in open source and tech talent development.

Xoxzo.com provide API services for developer to develop messaging and voice based application. The postings on this site are my own and don't necessarily represent my employer's positions, strategies or opinions. I can be reached via Twitter @k4ml.

Ikuti perkembangan terkini melalui twitter kami @koditi atau FB Page fb.me/koditi.