Tôi đã thiết lập hai dự án, một 'init' và một thư viện, được yêu cầu bởi init. Cả hai đều có bộ nạp tự động PSR-0, nhưng các giá trị tự động tải từ thư viện không được thêm vào nhà cung cấp/composer/autoload_namespaces.php trong dự án init.Composer Not Generating Autoloads Đối với Thư viện
mẫu composer.json từ Thư viện:
{
"name": "lxp/library",
"description": "A test library",
"autoload": {
"psr-0": {
"LXP\\Library": "src/"
}
}
}
mẫu composer.json từ dự án đòi hỏi rằng thư viện:
{
"name": "lxp/init",
"name": "A test init",
"autoload": {
"psr-0": {
"LXP\\Init": "src/"
}
},
"repositories": [
{
"type": "composer",
"url": "http://satis.repo.redacted/"
}
],
"require": {
"lxp/library": "dev-master"
}
}
Thư viện chứa các lớp LXP \ Library \ Something trong tập tin src/LXP/Library/Something.php.
Dự án yêu cầu thư viện chứa lớp LXP \ Init \ Now trong tệp src/LXP/Init/Now.php.
Khi chạy trình cài đặt soạn nhạc trong dự án 'init', nó tải xuống dự án thư viện và đặt nó vào nhà cung cấp chính xác, nhưng nhà cung cấp/composer/autoload_namespaces.php không chứa thông tin tự động tải của thư viện, chỉ có thông tin của dự án hiện tại .
Tôi đang làm gì sai? Nếu tôi chạy dump-autoload trong dự án thư viện thì tệp autoload_namespaces.php là chính xác, và một kịch bản lệnh khởi động nhanh xác nhận rằng nó thực sự nhận lớp đó.
EDIT - Đây là vấn đề với package.json được tạo ra bởi satis. Để khắc phục nó, tôi phải thêm thông tin tự động tải từ composer.json của thư viện vào tệp json mà tôi cung cấp cho satis, có vẻ như một bản sao không cần thiết và vì vậy tôi có thể làm sai. Có một nơi duy nhất mà tự động tải thông tin có thể được lưu trữ cho các thư viện satis? Ví dụ, satis có thể đọc các tệp composer.json tồn tại trong các thư viện mà nó quét không?
EDIT # 2 - Satis không đọc composer.jsons từ kho được chỉ định là loại 'gói'. Điều này là hiển nhiên trong việc nhận thức, bởi vì 'gói' được sử dụng cho các thư viện không có composer.json, và là một cách để bọc quản lý phụ thuộc giống như nhà soạn nhạc xung quanh chúng.
Thay đổi kho lưu trữ của satis.json thành loại 'vcs' có nghĩa là composer.json đã được đọc và thông tin (bao gồm cả đặc tả tự động tải) được phân tích cú pháp và lưu trữ trong packages.json.
@Seldaek - cảm ơn bạn đã đề xuất rằng cấu hình satis của tôi là vấn đề và tôi hy vọng rằng điều này sẽ làm rõ hành vi satis/composer cho bất kỳ ai khác ở vị trí của tôi.
@Seladek - tôi packages.json satis tạo không chứa bất kỳ thông tin tự động load, là nó phải? Nó đã được tái sinh vì thông tin tự động tải của thư viện đã được thêm vào. Vì đây là một dự án thử nghiệm, tôi đang rách toàn bộ nhà soạn nhạc giữa các lần chạy, xóa composer.lock và thư mục nhà cung cấp và cài đặt lại trình soạn nhạc đang chạy. – bmcgavin
@Seladek - tuy nhiên, tôi có thể xác nhận rằng việc thêm thông tin tự động tải trực tiếp vào gói.json đã có hiệu quả mong muốn. Chỉnh sửa câu hỏi ban đầu ngay bây giờ. – bmcgavin
Tôi nghĩ rằng bây giờ câu trả lời phụ thuộc vào cách bạn cấu hình satis. Nếu bạn đã sử dụng "type": "package", thì có thể bạn không nên, vì nó chỉ được sử dụng với mã không có composer.json. Nếu bạn sử dụng loại "vcs" thay vào đó, nó sẽ quét composer.json của git repo và bao gồm thông tin tự động tải chính xác trong packages.json được tạo ra – Seldaek