Tôi có một vài thư viện [Foo và Bar] mà tôi đang phát triển trong buổi hòa nhạc, nhưng vẫn là những thứ riêng biệt về mặt kỹ thuật. Trước đây tôi vừa định nghĩa lại trình tải tự động để thích "Foo\\": "../Foo/src"
, nhưng bây giờ tôi đã thêm phần phụ thuộc Guzzle vào Foo, Bar lật nắp nó vì nó không phải là một trong những phần phụ thuộc của nó.
Cấu trúc thư mục:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Tuyên bố tự động nạp lý thuyết: [trong Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Mã ví dụ:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
Làm cách nào để giải quyết vấn đề này mà không cần thiết lập repo của Nhà soạn nhạc cục bộ? Tôi muốn duy trì chúng dưới dạng các gói riêng biệt, chỉ là cái này yêu cầu cái kia và để xử lý các gói phụ thuộc của người kia.
chỉnh sửa sau câu trả lời:
Cảm ơn infomaniac, tôi đã làm những việc sau:
Đã khởi tạo repo git:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Đã thêm cấu hình trình soạn nhạc:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
Và sau đó composer update
!
sammitch/foo
là tên gói và không liên quan gì đến vị trí của nó. Sẽ xây dựng một danh sách các gói có sẵn dựa trên các repo đã định cấu hình của nó, trong trường hợp này là tìm nạp composer.json từ kho git cục bộ được chỉ định, sau đó composer xử lý phần còn lại. Các sammitch/foo
gói được sao chép sang ứng dụng hiện tại của vendor
thư mục giống như bất kỳ gói khác.