Tôi đang phát triển một gói - myvendor/mylib
- mà tôi định phân phối bằng Composer, có thể thông qua Packagist. Gói này chứa - trong số những thứ khác - một kịch bản lệnh PHP bin/console.php
mà tôi muốn cung cấp cho các dự án - giả sử myvendor/mymain
- nhập gói mylib
.Tập lệnh phụ thuộc cần đường dẫn đến Trình tự động nạp Composer
Tôi biết rằng tôi có thể chỉ định trong gói mylib
một khung cảnh config
trong composer.json
với một loạt các thùng nhập khẩu:
{
"name": "myvendor/mylib",
"config" : {
"bin" : ["bin/console.php"]
}
}
Khi dự án mymain
không một nhà soạn nhạc cài đặt/cập nhật, sau đó mylib/bin/console.php
đây là symlinked như mymain/bin/console.php
Hơn nữa, tôi biết rằng dự án mymain
có thể chỉ định - trong mình composer.json
- nơi ông muốn thùng phụ thuộc được symlinked:
{
"name": "myvendor/mymain",
"config": {
"bin-dir": "scripts"
}
}
Trong trường hợp này, tập lệnh bảng điều khiển sau đó được liên kết với nhau là scripts/console.php
.
Tính năng này hoạt động tốt - và cũng tuyệt vời như tất cả đều thoát ra. ;-)
Tuy nhiên, tập lệnh bin/console.php
chính nó cần phải bao gồm các Composer-generated vendor/autoloader.php
. Khi phát triển mylib
cách ly, tập lệnh bin/console.php
biết vị trí của riêng mình so với vendor/autoloader.php
, vì vậy, anh có thể bao gồm nó dễ dàng. Nhưng một khi nó được nhập khẩu như một sự phụ thuộc vào một dự án khác - myvendor/mymain
, trong trường hợp này - thì chỉ có kịch bản mymain/vendor/autoloader.php
. Về nguyên tắc, các kịch bản giao diện điều khiển không thể biết nơi ông cư trú tương đối so với kịch bản tự động tải.
Nhà soạn nhạc có cung cấp một số biến môi trường - có thể truy cập vào tập lệnh bảng điều khiển - cho phép tập lệnh xác định đúng tập lệnh vendor/autoloader.php
không?
BTW: Tôi biết về Composer CLI environment variable, vì vậy tôi tưởng tượng tôi có thể yêu cầu dự án nhập - mymain
- xác định (và xuất!) Var COMPOSER_VENDOR_DIR
. Sau đó, kịch bản giao diện điều khiển của tôi có thể sử dụng nó để tìm nạp tự động của dự án. Nhưng điều đó dường như có khả năng có vấn đề ở chỗ:
Chúng tôi muốn thiết lập để chỉ áp dụng cho dự án này, nhưng một var vỏ (và xuất khẩu) sẽ áp dụng đối với tất cả dự án truy cập từ đó phiên vỏ. Có vẻ tự phụ thuộc vào sự phụ thuộc nhỏ của tôi -
myvendor/mylib
- để áp đặt điều đó vào một dự án nhập khẩu.Về nguyên tắc, chính sự phụ thuộc -
myvendor/mylib
- sẽ có thể tìm thấy những gì anh ta cần. Có vẻ như không đúng khi đưa nhà cung cấp vào nhà nhập khẩu.
WDYT? Cảm ơn trước. Ý tưởng chào đón.
Bạn không cần phải lặp lại thực sự, bạn chỉ có thể xem hai thư mục kể từ đó sẽ khớp với// –
Seldaek
@Seldaek: Phải, cuối cùng tôi đã hiểu mẫu của bạn từ [jsonlint] (https: // github.com/Seldaek/jsonlint/blob/master/bin/jsonlint) và triển khai theo cách đó. Cảm ơn nhiều! –
Dường như mọi người vẫn gặp sự cố với điều này (tôi!) Tìm thấy câu trả lời ở đây: http://stackoverflow.com/questions/35271282/how-can-i-provide-a-script-for-php-cli-via -composer-as-standalone-and-as-depen – VladFr