Komposer untuk anak kecil

Hari yang baik

Ketika saya pertama kali berurusan dengan komposer, saya membuat sketsa kecil untuk saya sendiri dan sekarang, setelah beberapa saat, saya menyajikannya kepada publik dalam bentuk yang sedikit dimodifikasi.
Publikasi ini relevan bagi mereka yang, untuk pertama kalinya, telah menemukan manajer paket yang sangat diperlukan untuk PHP.

Jadi, Komposer adalah manajer paket untuk PHP.

Untuk apa Komposer dan contoh paling sederhana penggunaannya?


Ambil proyek ini sebagai contoh.
Singkatnya: ini adalah sekumpulan skrip untuk bekerja di VK API
Oleh karena itu, untuk pengoperasian skrip ini, Anda memerlukan beberapa pustaka
Perpustakaan terdaftar dalam file composer.json - file kunci ketika bekerja dengan komposer

Contoh composer.json:

gambar

Proyek ini menggunakan 5 perpustakaan. Oleh karena itu, jika pengembang memutuskan untuk menerbitkan proyek ini di github, maka ia hanya perlu meletakkan folder skrip di lobak dan menulis composer.json, yang akan menggambarkan perpustakaan yang diperlukan agar proyek ini dapat berfungsi. Kesederhanaannya jelas: dalam lobak, Anda tidak perlu menyeret semua pustaka yang diperlukan dengan trailer setelah file. Membutuhkan lebih sedikit ruang, lebih mudah untuk mendistribusikan proyek.

Contoh kerja:

Unduh proyeknya

gambar

Dalam folder skrip adalah skrip langsung dari proyek, yang memerlukan 5 paket ini.

Kami memulai instalasi paket:

gambar

Setelah instalasi, folder vendor muncul, tempat paket yang diinstal ditambahkan dan file autoload.php terbentuk

gambar

Kami menghubungkan file ini ke proyek dan hanya itu - perpustakaan terhubung, Anda dapat bekerja dengan aman dengannya.

gambar

Kesederhanaannya jelas: Anda tidak perlu mengunduh dan menghubungkan perpustakaan dan dependensinya sendiri, komposer akan melakukan segalanya untuk Anda. Dan seluruh bundel ini terhubung dengan satu file autoload.php
Semua paket yang ada di vendor ditambahkan ke autoloader. Dalam melakukannya, komposer bergantung pada file composer.json, yang harus dimiliki setiap paket. Pembentukan paket composer.json adalah tugas pengembang paket, konsumen paket hanya perlu menjelaskan dalam proyek composer.json paket mana yang perlu dihubungkan.

Ini adalah contoh proyek composer.json:

gambar

Ini adalah contoh paket composer.json:

gambar

Di bagian mengharuskan, ketergantungan paket ini terdaftar - pustaka guzzle http, yang diperlukan agar pustaka getjump / vk berfungsi. Dalam hal ini, mis. dari sudut pandang konsumen paket, semua jenis dependensi paket bukan โ€œperhatian kamiโ€, komposer akan mengetahui dependensi itu sendiri.

Paket namespace terdaftar di bagian pengisian otomatis.

gambar

getjump \\ Vk \\ - nama namespace
src / getjump / Vk / - direktori tempat file dengan kelas paket berada
Bekerja dengan perpustakaan ini dalam proyek:

gambar

Core dan Friends adalah kelas perpustakaan yang ditata dan terdaftar di folder src sesuai dengan standar PSR-4. Sekali lagi, membentuk struktur paket adalah pekerjaan pembuat paket.
Cukup bagi kami, sebagai konsumen paket, untuk mendaftar di proyek kami
termasuk '../vendor/autoload.php';
dan semua kelas dan ruang nama ini akan berfungsi dengan baik.
Dalam hal ini, kita tidak perlu repot dan menulis autoloader. Komposer akan melakukan ini sendiri ketika menjalankan perintah install.

Instalasi


Instal Komposer Secara Global


1) Pertama, Anda perlu jalur ke direktori dengan penerjemah PHP untuk didaftarkan di jalur variabel lingkungan.
Periksa apakah ini benar:
php โ€“versi

gambar

Jika kesimpulannya seperti ini, maka Anda dapat melewati langkah ini
Misalnya, Windows 7
Sistem -> Pengaturan sistem lanjutan -> Lanjutan -> Variabel lingkungan

Selanjutnya, kita akan tertarik pada variabel path:

gambar

Masukkan jalur ke penerjemah

gambar
gambar

* Sejak zaman kuno, saya memiliki rakitan xampp di komputer saya, rakitan itu sendiri tidak diperlukan di sini, tetapi juru bahasa darinya cukup cocok (versi PHP - 5.6).

2) Mulai ulang terminal.
Buat direktori dan instal komposer (saya memakai disk D)
D:
cd /
mkdir bin
tempat sampah
php -r "readfile ('https://getcomposer.org/installer');" | php
echo php "% ~ dp0composer.phar"% *> composer.bat

gambar

3) Tambahkan path ke composer.bat ke path variabel lingkungan, misalnya untuk D: \ bin seharusnya berhasil:

gambar

Selain itu dapat ditambahkan ke jalur
D: \ Users \% userName% \ AppData \ Roaming \ Composer \ vendor \ bin \
agar lebih nyaman menggunakan alat yang dipasang secara global melalui Komposer.
(Saya memiliki folder Users yang terletak di drive D, dan symlink dibuat di C untuk itu).
Itu saja, komposer diinstal dan siap untuk pergi.

Lain: selama instalasi, Anda dapat menangkap kesalahan
[RuntimeException]
Variabel lingkungan APPDATA atau COMPOSER_HOME harus ditetapkan agar komposer berjalan dengan benar
Solusinya ditemukan di sini github.com/composer/composer/issues/2033
Tambahkan variabel APPDATA dengan nilai D: \ Users \ GSU \ AppData \ Roaming

gambar

Instal Komposer Secara Lokal


Ada opsi untuk menginstal komposer secara lokal, tetapi dalam kebanyakan kasus tidak ada kebutuhan yang jelas untuk ini.
Namun, instalasi lebih sederhana di sini.
Karena program tidak terinstal secara global, Anda memerlukan file boot (komposer mini-program), untuk memuatnya kita menulis perintah:
php -r "readfile ('https://getcomposer.org/installer');" | php
sekarang file composer.phar telah muncul di direktori proyek
Semuanya bisa digunakan.
php composer.phar membutuhkan [nama paket]

Perbedaan antara instalasi global dan lokal


Perintah dijalankan secara berbeda untuk instalasi lokal dan global:

Sebagai contoh:
Lokal: php composer.phar membutuhkan silex / silex ~ 1.1
Secara global: komposer membutuhkan silex / silex ~ 1.1

Ketika menginstal secara lokal, Anda perlu mengunduh file instalasi ke folder proyek saat ini setiap kali
php -r "readfile ('https://getcomposer.org/installer');" | php

Dalam instalasi global, file ini tidak diperlukan. Komposer dimulai pada direktori mana pun saat ini.

Tim


instal - instal paket yang ditentukan dalam composer.json
perbarui - perbarui paket
dumpautoload - membangun kembali autoloader
memerlukan somepackage / somepackage: someversion - tambahkan paket baru (secara default, paket diinstal dari repositori resmi). Selama instalasi, paket ditulis dalam composer.json
perbarui - buka - perbarui file kunci composer.lock
config --global cache-files-maxsize "2048MiB" - contoh mengubah parameter konfigurasi
--profile - menambahkan parameter ini ke perintah apa saja akan memungkinkan tampilan waktu eksekusi dan jumlah memori yang digunakan
--verbose - informasi terperinci tentang operasi yang sedang dilakukan
show --installed - daftar paket yang terinstal dengan deskripsi masing-masing
show --platform - Informasi PHP
--dry-run - latihan eksekusi perintah. Itu dapat ditambahkan untuk menginstal dan memperbarui perintah. Mengemulasi pelaksanaan perintah tanpa mengeksekusi secara langsung. Diperlukan untuk memeriksa apakah instalasi paket dan dependensi berhasil.
hapus - hapus paket. Kebalikan dari kebutuhan

Sintaksis composer.json


Opsi Penamaan Paket dan Opsi Deskripsi Paket

Nama paket terdiri dari dua bagian yang dipisahkan oleh garis miring: nama vendor dan nama perpustakaan.

gambar

Jika paket dirancang sesuai dengan standar PSR-4, tetapi tidak dipublikasikan di packagist.org, tetapi pada github, maka alih-alih versi paket, Anda perlu mendaftarkan cabang dan repositori untuk paket ini:

gambar

Contoh menghubungkan perpustakaan yang terletak pada github, tetapi tidak dibingkai oleh standar PSR-4, tetapi merupakan tumpukan file biasa dengan kelas dan fungsi.

Tampilan sampel:

gambar

Pqr / superlib - ini adalah pustaka "salah" yang sama.

Di bagian repositori, kami menulis konstruksi untuk itu

gambar

Poin kuncinya adalah bagian pengisian otomatis, di sini kami menentukan file yang kami butuhkan dengan kelas dan fungsi.
Struktur perpustakaan:

gambar

Isi File:

gambar
gambar

Oleh karena itu, dalam proyek tersebut, panggilan ke getCurrentTime () akan terlihat seperti ini:
$ timer = pqr baru \ superlib \ TimerClass;
echo $ timer-> getCurrentTime ();

Versi


Saat menentukan versi paket yang valid, Anda dapat menggunakan korespondensi yang tepat (1.2.3), berkisar dengan operator pembanding (<1.2.3), kombinasi dari operator ini (> 1.2.3 <1.3), "terakhir tersedia" (1.2. *), Simbol Tilde (~ 1.2.3) dan tanda penyisipan (^ 1.2.3).
Indikasi tilde (~ 1.2.3) akan mencakup semua versi hingga 1.3 (tidak inklusif), karena dalam versi semantik ini adalah saat memperkenalkan fungsionalitas baru. Dalam hal ini, versi minor stabil terakhir akan diperoleh. Yaitu Hanya digit terakhir yang akan berubah - 1.2.5, 1.2.8, dll.

Indikasi tanda penyisipan (^ 1.2.3) secara harfiah berarti "waspadalah terhadap perubahan kritis saja" dan akan menyertakan versi hingga 2.0. Berkenaan dengan versi semantik, perubahan dalam versi utama adalah saat membuat perubahan kritis terhadap proyek, sehingga versi 1.3, 1.4 dan 1.9 cocok, sementara 2.0 tidak lagi ada.
Yaitu hanya digit pertama yang tidak berubah.

Tilda: ~ 1.2.3 adalah cara paling umum dan aman untuk menentukan versi.

File composer.lock


File composer.lock menyimpan daftar dependensi yang terinstal dan versinya. Dengan demikian, pada saat versi ketergantungan sudah diperbarui (perintah pembaruan), orang lain yang akan mengkloning proyek Anda akan menerima versi yang sama. Ini memungkinkan Anda untuk memastikan bahwa semua orang yang menerima proyek Anda memiliki lingkungan batch yang identik dengan yang Anda gunakan selama pengembangan, dan membantu untuk menghindari kesalahan yang mungkin timbul karena peningkatan versi.

Setiap kali perintah pembaruan dijalankan, versi paket yang diperbarui terdaftar di composer.lock. File ini didorong di bawah sistem kontrol versi, dan ketika menginstal paket pada server baru, versi paket yang terdaftar dalam file ini akan dikirimkan. Saat menjalankan perintah instal, komposer terutama akan bergantung pada composer.lock. Dengan demikian, lingkungan paket yang sama dalam hal versi akan dijamin diinstal pada server yang berbeda.

Juga, file composer.lock berisi hash dari file composer.json.
Dan jika file json telah diedit, komposer akan memperingatkan Anda bahwa file kunci tidak cocok dengan file json.

Dalam hal ini, Anda perlu menjalankan perintah pembaruan komposer - kunci, yang akan memperbarui komposer.lock.

gambar
gambar
gambar
gambar

Perbedaan antara instal dan perbarui dalam konteks menggunakan composer.lock


Perintah pemasangan komposer melakukan hal berikut:

Periksa apakah composer.lock ada:

- jika tidak, selesaikan dependensi dan ciptakan itu
- jika composer.lock ada, instal versi yang ditentukan di dalamnya

Perintah pembaruan komposer :

- Memeriksa composer.json
- Menentukan versi terbaru berdasarkan yang ditentukan dalam file ini
- Menginstal versi terbaru
- Pembaruan komposer.kunci sesuai dengan yang diinstal

Contoh penggunaan dari sudut pandang pencipta proyek


Ada proyek tanpa paket yang diinstal

gambar

Letakkan beberapa perpustakaan

gambar
gambar

Kami telah membentuk composer.json dengan informasi paket

gambar

Kami dapat menambah dan mendistribusikan proyek dengan file ini.

gambar

Pengguna lain mengunduh proyek kami, menjalankan instalasi, dan semua paket yang diperlukan dikerahkan dalam proyeknya.

gambar

Contoh penggunaan dari sudut pandang pembuat paket


Sebagai contoh, saya membuat kelas dengan metode yang akan menampilkan URL halaman saat ini

gambar

Kelas dirancang sebagai paket dan diunggah ke github.

gambar
gambar

Disusun oleh composer.json

gambar

Saya mendaftar di kantor. repositori dan menambahkan paket, menunjukkan tautan ke repositori di mana ia berada

gambar

Semua paket ditambahkan

gambar
gambar

Saya memeriksa fungsionalitas paket

gambar

Paket dikirimkan, ini kelas kami:

gambar

Panggil metode

gambar

Semuanya baik-baik saja.

gambar

Komposer dan PhpStorm


Inisialisasi

gambar
gambar
gambar
gambar

Mengkonfigurasi Kemampuan Penyuntingan Paket Komposer

gambar

Jika opsi diset, maka tidak akan mudah mengambil dan mengedit file di dalam vendor / * / *

Instalasi Paket

gambar
gambar
gambar
gambar
gambar

Nuansa, kehalusan, situasi sulit


Kesalahan: Peringatan: File kunci tidak mutakhir dengan perubahan terbaru di composer.json. Anda mungkin mendapatkan dependensi yang usang. Jalankan pembaruan untuk memperbarui mereka. Tidak ada yang dipasang atau diperbarui
Solusi: pembaruan komposer --kunci

Pembaruan membutuhkan waktu lama dengan sejumlah besar perpustakaan
Komposer memeriksa semua dependensi paket, dan jika ada banyak paket, maka ini akan lama.
Solusi: jika Anda hanya perlu memperbarui satu perpustakaan, maka tentukan secara eksplisit:

paket / nama pembaruan komposer

Anda juga dapat menambahkan parameter "--prefer-dist" (walaupun, secara teori, ini harus dihidupkan secara default), maka komposer akan mencoba menginstal perpustakaan dari arsip zip, daripada mengkloning repositori.

File "****. Json" tidak dapat diunduh: gagal membuka streaming: Permintaan HTTP gagal!
Komposer mencoba menarik paket melalui HTTP, meskipun harus melebihi HTTPS
Solusi: komposer config - global repo.packagist komposer packagist.org

Paket tidak tersedia dalam versi yang cukup stabil sesuai dengan pengaturan stabilitas minimum Anda
lihat untuk lebih jelasnya.
Paket tidak memiliki versi stabil, dan menginstal versi dev tidak diperbolehkan di konfigurasi.
Solusi: baik atur parameter "minimum-stabilitas": "dev" dan "prefer-stable": benar untuk mengatur versi stabil mungkin, atau - jika ini adalah paket Anda sendiri - buat tag dengan versi (stiker stabil di readme on github harus tampilkan versi)

Sejarah perkembangan dan perubahan kunci


- rilis pertama berlangsung pada 1 Maret 2012 dan seluruh alat 2012 sedang aktif dikembangkan
- Januari 2014 - menerapkan pengisian otomatis berdasarkan PSR-4
- Maret 2016 - versi beta (1.0.0-beta1) dirilis. Perintah show --tree tambahan untuk menampilkan paket yang diinstal di pohon, mengapa-tidak - menunjukkan mengapa tidak mungkin untuk menginstal paket, perbarui --interaktif - memungkinkan Anda memilih paket mana yang akan diperbarui, serta banyak perbaikan dan perbaikan lainnya.
- 4 April 2016 - rilis stabil pertama dari Komposer diperkenalkan - 1.0.0

Desember 2014 - salah satu kunci berkomitmen untuk repositori komposer
github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799
Inti dari perubahan - pengumpul sampah dinonaktifkan

gambar
gambar

habrastorage.org/getpro/habr/comment_images/db3/59a/972/db359a972df6730e52f292b5c52095b8.gif

Referensi


Di luar kantor: getcomposer.org
Repositori paket resmi: packagist.org
Repositori komposer: github.com/composer/composer
Tutorial Komposer Hebat: daylerees.com/composer-primer
Daftar perintah dan contoh terperinci dari file composer.json : composer.json.jolicode.com

Source: https://habr.com/ru/post/id439200/


All Articles