Saya seorang Komposer pemula dan saya mencoba untuk membuat satu proyek tergantung satu sama lain, sementara kedua proyek hanya ada pada mesin lokal.
Komposer.json di perpustakaan saya proyek (ProjectA) adalah:
{
"name" : "project/util",
"type" : "library"
}
Saya diinisialisasi git di folder dasar dari proyek ini.
Saya komposer.json dalam proyek tergantung pada yang pertama (ProjectB):
{
"repositories": [
{
"name" : "util",
"type" : "git",
"url" : "/d/workspaces/util"
}
],
"require": {
"project/util" : "*"
},
}
Ketika saya menjalankan composer install
dari ProjectB, saya mendapatkan error berikut:
[RuntimeException] Gagal untuk mengkloning , tidak bisa membaca paket dari itu fatal: repository '' tidak ada
Saya berasumsi ada sesuatu yang salah dengan url repositori, tapi saya tidak yakin apa lagi untuk menulis di sana.
Autoload lokal paket menggunakan composer (tanpa pergi ke packagist setiap kali anda mengubah).
Ada banyak cara untuk melakukannya, aku akan mencakup 2 dari mereka:
Dalam semua kasus, kita memiliki 2 partai utama:
Metode 1: (langsung namespace)
Buka proyek utama komposer.json
file dan autoload lokal paket namespaces menggunakan metode apapun (PSR-4, PSR-0, ...).
contoh:
jika di composer.json lokal paket yang kami miliki:
"autoload": {
"psr-4": {
“Local\\Pack\\": "library"
}
},
"autoload-dev": {
"psr-4": {
"Local\\Pack\\Tests\\": "tests"
}
},
kemudian di composer.json dari proyek utama kita harus memiliki:
"autoload": {
"psr-4": {
"Mahmoudz\\Project\\": "src",
"Local\\Pack\\": "../path/to/local/pack/library” << referencing the other local package
}
},
"autoload-dev": {
"psr-4": {
"Mahmoudz\\Project\\Tests\\": "tests"
}
},
Keuntungan:
Metode 2: (repositori lokal)
Download lokal paket dari repositori lokal.
paket lokal:
"": "vendor-nama paket-nama",
"autoload": { ... // gunakan metode mana yang anda inginkan, tapi pastikan itu dimuat dengan benar
"minimum-stabilitas": "dev"
komposer dump-autoload
proyek utama:
"repositori": [ { "type": "kamu", "url": "/full/path/ke/direktori/lokal/paket/paket-nama" } ], "memerlukan": { "vendor-nama/nama-paket": "dev-master" },
CATATAN: setiap kali anda membuat perubahan di lokal paket (bukan penjual) yang anda butuhkan untuk git commit maka anda dapat composer update proyek utama, maka akan mendapatkan salinan terbaru dari repo utama proyek direktori vendor.
Keuntungan:
Saya pikir anda've hanya punya sintaks yang salah. Jenis hanya harus VCS, dan kemudian komposer angka apa jenis VCS itu.
Jadi dalam proyek anda B, entri untuk repositori harus:
"repositories": [
{
"type": "vcs",
"url" : "/d/workspaces/util"
}
],
Anda don't harus nama apa perpustakaan yang tersedia di /d/ruang kerja/util
. Komposer akan memindai komposer.json file di direktori tersebut dan tahu apa nama proyek yang tersedia di sana, dan menggunakan proyek dari direktori tersebut dalam preferensi untuk versi yang tercantum di packagist atau lainnya repositori.
Saya menemukan tutorial ini benar-benar berguna: https://johannespichler.com/developing-composer-packages-locally/ ketika aku menghadapi masalah dengan lokal produksi paket
Catatan symlink
kondisi yang memungkinkan vendor folder yang akan symlink yang kemudian berarti anda tidak perlu lagi composer update
setiap kali anda ingin melihat perubahan
"options": {
"symlink": true
}