如何在Laravel中正确安装软件包?

20

最近,我安装了一个名为LaravelFacebookSdk的包。


安装

我通过添加以下内容来更新我的composer.json文件:

"sammyk/laravel-facebook-sdk": "~3.0"

然后,我运行composer update


服务提供者

在我的/config/app.php中,我将LaravelFacebookSdkServiceProvider添加到提供者数组中。

'providers' => [
    SammyK\LaravelFacebookSdk\LaravelFacebookSdkServiceProvider::class,
    ];

一切运行良好,然后我将其推送到我的存储库。


问题来了!

第二位开发人员进行git pull并运行composer update

他会收到一个错误信息。

 SammyK\LaravelFacebookSdk\LaravelFacebookSdkServiceProvider::class,

因为我在/config/app.php的providers数组中声明了它,所以它是未定义的。

他需要去注释掉那行代码,并先运行composer update。在一切安装成功后,再回去取消注释那行代码。

其他开发人员每次安装新包都需要这样做吗?

我有遗漏什么吗?

如果我做错了什么,请指出。


1
他不应该需要取消注释该行,但是每当你添加新包时,他将需要运行composer update。 - aynber
当他运行composer update时,他遇到了错误。 - code-8
1
是的,我相信这是每个人都会做的。先注释掉,然后更新,最后再取消注释。 - Arun Unnikrishnan
谢谢。现在我知道,至少我在这里没有做错任何事情。 - code-8
1
你不应该运行composer update来安装新的包。你应该将包添加到composer.json,然后运行composer install。使用install而不是update将修复此问题,而无需编辑json文件。@Arunu不需要注释/取消注释。 - jfadich
2个回答

12
问题在于你的composer.json文件中配置了一个php artisan clear-compiled命令,在更新过程之前运行。由于artisan是Laravel应用程序的重要部分,当应用程序代码出现问题时,它会报错。因为你引用了一个目前不存在的类,所以会产生RuntimeException错误。你可以通过将该命令从pre-update-cmd列表移动到post-update-cmd列表来解决这个问题,请修改如下:
"scripts": {
    ...
    "pre-update-cmd": [
        "php artisan clear-compiled"
    ],
    "post-update-cmd": [
        "php artisan optimize"
    ]
},

变成这样:

"scripts": {
    ...
    "pre-update-cmd": [
    ],
    "post-update-cmd": [
        "php artisan clear-compiled",
        "php artisan optimize"
    ]
},

现在,在更新过程中,只要存在所引用的LaravelFacebookSdkServiceProvider类,就会运行clear-compiled命令,因此不会再出现错误。


@ihue Bogdan说的问题是正确的,但我建议您在更新app.php文件之前运行composer install(或update),而不是更改您的composer.json文件。 - jfadich
@jfadich 通过将其添加到composer.jsonapp.php中,安装包被安装,然后将其推送到git服务器。然后,另一个开发人员将拉取该代码,但需要运行composer update来将库安装到vendor,但是此时app.php配置已经就位,因此您建议的方法仅适用于最初安装包的开发人员。拉取新代码的所有其他开发人员都将具有更新的$providers数组,但没有库代码。 - Bogdan
1
@Bogdan 其他开发人员不应该运行 composer update。他们应该运行 composer install。当你只是想将你的安装与仓库保持最新时,Composer update 将会更新所有包,这并不是你想要的。 - jfadich
1
@jfadich 很好的观点。我太专注于OP试图运行“update”的事实,而正确的操作确实是“install”。 - Bogdan

8
请使用 composer install 命令代替 composer update 命令。无需更改您的json文件中的命令。
运行 composer update 会根据您的composer.json文件版本更新所有软件包,并更新composer.lock文件。这不是您想要的结果。
运行 composer install 会确保安装您json文件中的所有内容,包括您刚添加的包。这才是您期望的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接