Memberikan alternatif yang lebih aman untuk composer global require
.
Cgr telah digunakan di lingkungan dunia nyata selama beberapa tahun; namun, lihat antrean masalah dan 'Batasan' di bawah.
Perintah Composer global require
adalah teknik instalasi yang direkomendasikan untuk banyak alat baris perintah PHP; namun, pengguna yang menginstal alat dengan cara ini berisiko mengalami kegagalan instalasi yang disebabkan oleh konflik ketergantungan antar proyek yang berbeda. Skrip cgr berperilaku mirip dengan composer global require
, menggunakan composer require
untuk menginstal salinan alat baris perintah global per pengguna, namun di lokasi terisolasi yang tidak akan mengalami konflik ketergantungan dengan alat lain yang diinstal secara global.
Skrip cgr tidak berhubungan dengan keamanan; itu tidak lagi, atau kurang aman dibandingkan menginstal melalui kebutuhan composer global.
Composer sendiri merekomendasikan composer global require
sebagai perintah "kenyamanan" untuk menginstal alat baris perintah. Sayangnya, rekomendasi ini bertentangan dengan asumsi dasar Composer, yaitu bahwa setiap dependensi proyek harus dikelola secara independen. Perintah Composer global
menciptakan satu proyek "global"; proyek yang diinstal melalui composer global require
semuanya akan diinstal di lokasi ini, dan semua dependensinya akan digabungkan. Artinya, konflik dapat muncul antara dua proyek independen yang tidak pernah dirancang untuk bekerja sama, dan ketergantungannya tidak perlu digabungkan menjadi satu pemuat otomatis. Ketika situasi seperti ini muncul, seringkali sangat sulit bagi pemula untuk mendiagnosisnya.
Skrip ini, disebut cgr
, dinamai berdasarkan "composer global require", perintah Composer yang ditirunya. Ia menawarkan mekanisme pengganti untuk menginstal alat baris perintah PHP secara global yang secara fungsional setara (hampir) dengan perintah yang ada, namun jauh lebih aman. Script Cgr akan membuat direktori terpisah untuk setiap proyek yang diinstal; secara default, lokasi instalasi adalah ~/.composer/global/org/project
. Skrip biner apa pun yang tercantum dalam file composer.json proyek yang diinstal akan diinstal ke direktori bin Komposer standar, ~/.composer/vendor/bin
.
Karena skrip cgr tidak memiliki ketergantungannya sendiri, skrip ini aman untuk diinstal melalui perintah Composer global require
:
composer global require consolidation/cgr
Jika Anda belum melakukannya, Anda juga perlu menambahkan vendor/bin
dari direktori home Composer ke $PATH Anda. Setelah itu, Anda dapat mengganti cgr
dengan alat baris perintah apa pun yang petunjuk instalasinya merekomendasikan penggunaan Composer global require
.
Untuk menambahkan direktori bin yang benar ke PATH Anda:
PATH="$(composer config -g home)/vendor/bin:$PATH"
Contoh:
cgr drush/drush
Berbeda dengan perintah composer global require, cgr dapat digunakan untuk mengatur stabilitas minimum suatu proyek sebelum menginstalnya. Hal ini dilakukan dengan cara yang sama seperti perintah composer create-project
:
cgr --stability RC pantheon-systems/terminus 1.0.0-alpha2
Perilaku skrip cgr dapat disesuaikan dengan opsi baris perintah dan variabel lingkungan.
Pilihan | Variabel Lingkungan | Keterangan |
---|---|---|
--jalur komposer | CGR_COMPOSER_PATH | Jalur ke biner Komposer. |
--base-dir | CGR_BASE_DIR | Tempat menyimpan proyek "global". |
--bin-dir | CGR_BIN_DIR | Tempat memasang binari proyek. |
Jika variabel-variabel ini tidak ditentukan, maka cgr menggunakan nilai variabel lingkungan COMPOSER_HOME
sebagai direktori dasar untuk digunakan seperti yang dijelaskan dalam dokumentasi Komposer tentang variabel lingkungan.
Untuk mengonfigurasi cgr agar menginstal binari ke ~/bin, tambahkan yang berikut ini ke file ~/.bashrc Anda:
export CGR_BIN_DIR=$HOME/bin
Anda dapat memilih direktori mana pun yang Anda suka untuk CGR_BIN_DIR
, asalkan direktori tersebut ada di $PATH Anda.
Untuk menampilkan informasi proyek, jalankan:
cgr info drush/drush
Untuk menampilkan informasi semua proyek yang diinstal melalui 'cgr', jalankan:
cgr info
Untuk memperbarui proyek yang Anda instal cgr
, jalankan:
cgr update drush/drush
Untuk memperbarui semua yang diinstal oleh cgr
, jalankan:
cgr update
Untuk menghapus proyek:
cgr remove drush/drush
Untuk memperbarui atau menghapus cgr itu sendiri, jalankan composer global update consolidation/cgr
atau composer global remove cgr
. Perhatikan bahwa menghapus cgr tidak berpengaruh pada perintah yang Anda instal dengan cgr; mereka akan tetap terpasang dan berfungsi.
Jika Anda menemukan bahwa cgr
masih berperilaku seperti perintah Composer global require
standar, periksa kembali pengaturan variabel $PATH Anda, dan gunakan cgr dan alias cgr
which cgr
untuk menentukan apakah skrip ini dipilih oleh shell Anda atau tidak. Ada kemungkinan bahwa cgr mungkin bertentangan dengan beberapa alat lain; misalnya, proyek oh-my-zsh mendefinisikan alias cgr. Jika ini menjadi masalah bagi Anda, unalias cgr
, atau mungkin tambahkan alias cgrx="$HOME/.composer/vendor/bin/cgr"
untuk menjalankan alat eksperimental ini sebagai cgrx
.
Komposer juga akan memuat Plugin Komposer dari proyek Komposer "global". Ini jarang terjadi; namun, jika Anda ingin menginstal Composer Installer secara global, maka Anda harus menggunakan perintah composer global require
secara langsung. Skrip cgr mengisolasi proyek yang diinstalnya satu sama lain untuk menghindari potensi konflik antar dependensi; isolasi ini juga membuat Plugin Komposer tidak tersedia dalam konteks global.
Skrip cgr menjaga kenyamanan pengelolaan lokasi instalasi global secara otomatis untuk Anda; namun, jika ini tidak diinginkan, Anda cukup menjalankan perintah seperti:
COMPOSER_BIN_DIR=$HOME/bin composer require org/project:~1.0
Jika Anda menggunakan cara ini, Anda perlu mengatur lokasi instalasi secara manual menggunakan mkdir
dan cd
seperlunya sebelum menjalankan composer require
. Anda tidak bisa begitu saja menyetel COMPOSER_BIN_DIR secara global, karena melakukan hal ini akan menyebabkan binari dari proyek lokal dipasang ke direktori bin global Anda, yang tentu saja tidak diinginkan.
Dalam skrip Integrasi Berkelanjutan, konstruksi berikut berguna:
/usr/bin/env COMPOSER_BIN_DIR=$HOME/bin composer --working-dir=$HOME/project require org/project:~1.0
Ubah direktori instalasi ( $HOME/project
) agar sesuai dengan proyek yang sedang diinstal, sehingga setiap proyek diinstal di lokasinya yang terpisah.
Plugin Composer bamarni/composer-bin-plugin menawarkan cara serupa untuk mengelola instalasi terisolasi alat biner dengan menentukan lokasi instalasi bernama terpisah. Hal ini memberikan cara mudah untuk menginstal beberapa proyek secara bersamaan (misalnya menginstal Robo bersama dengan proyek eksternal yang menyediakan tugas Robo tambahan dalam proyek 'robo').
Alat ini diharapkan dapat menjadi solusi sementara, hingga perubahan pada Komposer membuatnya tidak diperlukan lagi. Lihat masalah Komposer untuk pembaruan.