Я разрабатываю библиотеку для Laravel, которая содержит поставщика услуг. Я добавил эту библиотеку в другой проект composer.json
.
Файл composer.json
для "основного проекта" содержит следующие сценарии.
"scripts": {
"post-root-package-install": [
"php -r \"copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"pre-update-cmd": [
"php artisan clear-compiled"
],
"post-update-cmd": [
"php artisan optimize"
]
},
Я могу включить библиотечную зависимость просто отлично, за исключением одной вещи; сценарии pre-update-cmd
и post-update-cmd
вызывают ошибку и вызывают у меня много головных болей. При запуске sudo composer update
для обновления зависимостей я получаю следующую ошибку.
$ sudo composer update
> php artisan clear-compiled
PHP Fatal error: Class 'MyName\MyProject\MyAwesomeServiceProvider' not found in /Users/Me/dev/MyProject/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 146
[Symfony\Component\Debug\Exception\FatalErrorException]
Class 'MyName\MyProject\MyAwesomeServiceProvider' not found
Script php artisan clear-compiled handling the pre-update-cmd event returned with an error
[RuntimeException]
Error Output: PHP Fatal error: Class 'MyName\MyProject\MyAwesomeServiceProvider'
not found in /Users/Me/dev/MyProject/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 146
У меня довольно много проблем, прежде чем задавать этот вопрос и прочесть почти все, что я могу найти. По-видимому, это известная проблема, которая обсуждалась в нескольких проблемах GitHub в репозитории Laravel. Тем не менее, мне еще предстоит найти обходное решение, даже после нескольких попыток.
Похоже, что проблема заключается в том, что Artisan командует bootstrap Laravel, что приводит к ошибке, потому что поставщик услуг недоступен на данный момент - или что-то в этом роде. Перемещение команды clear-compiled
на post-update-cmd
вызывает ту же ошибку, которая меня немного удивляет, потому что я думал, что поставщик услуг будет доступен в этот момент.
Единственное, что работает для меня, - это вручную прокомментировать строку, которая включает поставщика услуг в config/app.php
, перед запуском composer update
, а затем снова добавить его. Я делаю это в течение нескольких часов, и это уже беспокоит меня, и я действительно не могу поверить, что эта проблема существует.
Кто-нибудь знает, как обойти эту ошибку, чтобы я не получил ошибку, которую мой поставщик услуг не обнаружил при обновлении зависимостей Composer для моего проекта?
EDIT:
Вот файл composer.json
для библиотеки.
{
"name": "my-name/my-project",
"type": "library",
"authors": [
{
"name": "My Name",
"email": "[email protected]"
}
],
"require": {
"php": ">=5.5.0",
"laravel/framework": "~5.2"
},
"autoload": {
"classmap": [],
"psr-4": {
"MyName\\MyProject\\": "src/"
}
}
}