PHP: Pengenalan kepada Composer
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:-
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).