Saya memiliki beberapa perpustakaan [Foo and Bar] yang saya kembangkan bersama, tetapi secara teknis masih merupakan hal yang terpisah. Sebelumnya saya baru saja mendefinisikan ulang pemuat otomatis menjadi suka "Foo\\": "../Foo/src"
, tetapi sekarang saya telah menambahkan ketergantungan Guzzle ke Foo, Bar membalik tutupnya karena itu bukan salah satu dari ketergantungannya.
Struktur direktori:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Pernyataan Pemuatan Otomatis Teoretis: [di Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Kode contoh:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
Bagaimana saya bisa mengatasi ini tanpa menyiapkan repo Komposer lokal? Saya ingin mempertahankan ini sebagai paket terpisah, hanya yang satu memerlukan yang lain, dan untuk itu memproses ketergantungan yang lain.
edit pasca-jawaban:
Berkat infomaniak, saya telah melakukan hal berikut:
Menginisialisasi git repo:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Menambahkan konfigurasi komposer:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
Lalu composer update
!
sumber
sammitch/foo
adalah nama paket dan secara harfiah tidak ada hubungannya dengan lokasinya. Akan membuat daftar paket yang tersedia berdasarkan repositori yang dikonfigurasi, dalam hal ini mengambil composer.json dari repo git lokal yang ditentukan, dan kemudian composer menangani sisanya. Thesammitch/foo
paket disalin ke aplikasi saat inivendor
folder sama dengan paket lain.Jawaban:
Anda dapat menggunakan fitur repositori Komposer
https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository
Alih-alih menggunakan format http, tentukan jalur file pada disk.
sumber
Cara untuk link ke lokal, dalam pengembangan paket untuk add pertama dalam proyek utama Anda adalah
composer.json
sebuah repositori , seperti ini:Anda juga perlu memiliki versi yang ditentukan dalam paket pengembangan Anda
composer.json
atau cara saya melakukannya adalah dengan meminta paket menggunakan@dev
, seperti ini:Ini harus menghasilkan:
Perintah
@dev
in require penting, komposer menggunakan ini untuk mengambil kode sumber dan menghubungkannya ke paket baru Anda.Ini adalah bendera stabilitas yang ditambahkan ke batasan versi (lihat tautan paket ).
Bendera stabilitas minimum adalah:
sumber
composer require "vendorname/packagename @dev"
diterjemahkan ke"require":{ "vendorname/packagename": "@dev" }
dalam composer.json aplikasi Anda jika Anda ingin menjalankan penginstalan komposerSetelah menghabiskan beberapa waktu, saya akhirnya mengerti solusinya. Mungkin ini akan berguna untuk orang seperti saya dan akan menghemat waktu Anda, jadi saya telah memutuskan bahwa saya harus membagikannya di sini.
Dengan asumsi Anda memiliki struktur direktori berikut (relatif terhadap direktori root proyek Anda):
Dalam contoh ini, Anda mungkin melihat bahwa
local
folder tersebut dimaksudkan untuk proyek bersarang perusahaan Anda, misbar-project
. Tetapi Anda dapat mengonfigurasi tata letak lainnya, jika Anda mau.Setiap proyek harus memiliki
composer.json
file sendiri-sendiri , misalnya rootcomposer.json
danlocal/bar-project/composer.json
. Maka isinya adalah sebagai berikut:(root
composer.json
:)(
local/bar-project/composer.json
:)Jika, misalnya, Anda ingin mencari setiap proyek dalam direktori saudara yang terpisah, seperti berikut:
- maka Anda perlu menautkan ke direktori masing-masing di
repositories
bagian:Setelah itu jangan lupa
composer update
(atau bahkanrm -rf vendor && composer update -v
seperti yang disarankan oleh dokumen )! Di bawah tenda, komposer akan membuatvendor/your-company/bar-project
symlink yang menargetkanlocal/bar-project
(atau../bar-project
masing - masing).Dengan asumsi Anda
public/index.php
hanya afront controller
, misalnya:Maka Anda
config/composition-root.php
akan menjadi:sumber
composer update
serupacomposer.json
dan oleh karena itu Anda perlu menghapus symlink sebelumnya yang dibuat oleh komposer