2013-05-06 36 views
8

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.

Trả lời

5

tôi thấy hai sai lầm có thể bạn có thể làm điều đó sẽ gây ra điều này:

  • Bạn quên cập nhật repo satis của bạn để cấu hình tự động load cho LXP/init không được cập nhật trong đó
  • Bạn đang chạy cài đặt soạn nhạc từ tệp khóa và điều đó có nghĩa là nhà soạn nhạc chỉ đọc thông tin từ tệp composer.lock và không cập nhật siêu dữ liệu gói thành phiên bản mới nhất có sẵn trong satis. Để giải quyết điều này, bạn nên chạy nhà soạn nhạc cập nhật thay thế.
+0

@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

+0

@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

+1

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

2

Hãy thử lệnh composer dump-autoload.

0

Phụ thuộc vào cách bạn cài đặt thư viện của mình qua Composer.Ví dụ: nếu bạn đang tải xuống dưới dạng package (giống như tôi tin với composer loại), như Nhà soạn nhạc không bao giờ đọc số composer.json, bạn cần sử dụng loại vcs thay thế. Xem: GH-6846.

Đây là composer.json mà nên làm việc:

{ 
    "require": { 
    "lxp/library": "dev-master" 
    }, 
    "repositories": [ 
    { 
     "type": "vcs", 
     "url": "http://satis.repo.redacted/" 
    } 
    ] 
} 

Sau đó chạy: composer install.

Để gỡ rối, hãy thử chạy:

  • composer dump-autoload -o -vvv.
  • composer diagnose -vvv