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


How to properly install package in Laravel?

最近,我安装了一个包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中声明了这一点。

他必须注释掉那行,然后首先运行composer update。成功安装完所有内容后,返回并再次取消注释该行。

其他开发人员每次都要这样做吗,我们安装了一个新的软件包?

我是不是遗漏了什么?

如果我做错了什么,请告诉我。

这里的问题是composer.json文件中有一个php artisan clear-compiled命令被配置为在更新过程之前运行。由于artisan是Laravel应用程序不可分割的一部分,当应用程序代码出现问题时,它会抱怨。由于您有一个对尚未存在的类的引用,因此它将吐出RuntimeException。您可以通过将该命令从pre-update-cmd列表移动到composer.json中的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命令将在更新过程之后运行,因此不再出现错误。

不要运行composer update,而是运行composer install。不需要更改json文件中的命令。

当你运行composer update时,它会遍历你的所有包,并根据你的composer.json更新到最新的小版本,然后更新composer.lock。这不是你想要的。

当您运行composer install时,它将确保json文件中的所有内容都已安装,包括您刚刚添加的包。这就是你想要的。