And*_*708 13 php laravel laravel-5
我正在为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"
]
},
Run Code Online (Sandbox Code Playgroud)
除了一件事,我可以很好地包含库依赖项; 在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
Run Code Online (Sandbox Code Playgroud)
在问这个问题之前,我已经开始搜索了很多内容,并仔细阅读了我能找到的所有相关内容.显然,这是一个已知问题,已在Laravel存储库中的多个GitHub问题中进行了讨论.但是,即使在尝试了多个问题之后,我还没有找到解决方法.
似乎问题是Artisan命令引导Laravel,这会导致错误,因为此时服务提供程序不可用 - 或类似的东西.移动clear-compiled命令post-update-cmd导致相同的错误,这让我感到惊讶,因为我认为服务提供商此时可用.
对我有用的唯一事情是config/app.php在运行之前手动注释掉包含服务提供者的行composer update,然后再添加它.我已经这样做了几个小时,它已经困扰了我,我真的不敢相信这个问题.
有没有人知道如何解决此错误,以便在更新我的项目的Composer依赖项时,我没有收到我的服务提供商未找到的错误?
编辑:
这是composer.json库的文件.
{
"name": "my-name/my-project",
"type": "library",
"authors": [
{
"name": "My Name",
"email": "test@example.com"
}
],
"require": {
"php": ">=5.5.0",
"laravel/framework": "~5.2"
},
"autoload": {
"classmap": [],
"psr-4": {
"MyName\\MyProject\\": "src/"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题终于得到了解决为laravel/framework:v5.2.25和laravel/laravel:v5.2.27,和回迁到laravel/framework:v5.1.33和laravel/laravel:v5.1.33。
此修复程序包括对Laravel应用程序的更改(laravel/laravel除了Laravel框架(laravel/framework)之外,)。要实施,您将需要:
1)更新文件scripts部分composer.json以使其与软件包中的部分匹配laravel/laravel。特别:
pre-update-cmd部分post-install-cmd部分中,替换"php artisan clear-compiled"为"Illuminate\\Foundation\\ComposerScripts::postInstall"post-update-cmd部分中,替换"php artisan clear-compiled"为"Illuminate\\Foundation\\ComposerScripts::postUpdate"2)更新更新后composer.json,运行composer update。如果只想更新框架,则可以运行composer update laravel/framework。
在查看了您在评论中发布的Github问题以及相关问题之后,您可能需要等待一段时间。泰勒想放下剧本vendor/bin并进行修改composer.json以运行该,但是看起来他们正在等待社区的PR,并且实际上不会自己实现。
您没有做错任何事;您的自动加载设置正确。现在的问题是Laravel。
将命令移至post-update-cmd脚本不起作用,因为技术人员将始终尝试在缓存文件存在时加载它们。运行时clear-compiled命令时,artisan在尝试删除高速缓存文件之前将其加载(启动的一部分)。
最好的选择是在artisan运行之前手动删除缓存文件。并且,您需要在Laravel / Artisan之外进行操作。因此,您可以手动删除文件,也可以创建一个小脚本来将其添加到您的composer.json文件中(对于您的主项目,而不是对于您的软件包)。
要删除的文件:
bootstrap/cache/compiled.phpbootstrap/cache/services.phpbootstrap/cache/compiled.phpbootstrap/cache/services.jsonvendor/compiled.phpstorage/framework/compiled.phpvendor/services.jsonstorage/framework/services.json| 归档时间: |
|
| 查看次数: |
10722 次 |
| 最近记录: |