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

时间:2016-01-11 16:10:05

标签: php laravel laravel-5 laravel-5.1

最近,我安装了一个包LaravelFacebookSdk

安装

我通过添加

来更新我的composer.json
"sammyk/laravel-facebook-sdk": "~3.0"

然后,我运行composer update

服务提供商

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

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

一切都很好。然后,我将它推送到我的存储库。

问题出现了!

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

他会收到错误

 SammyK\LaravelFacebookSdk\LaravelFacebookSdkServiceProvider::class,

是不确定的。因为,我在我的提供者数组下的/config/app.php声明了这一点。

他必须注释该行,然后首先运行composer update。安装完成后,再返回取消注释该行。

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

我在这里遗漏了什么吗?

请告知我是否做错了。

2 个答案:

答案 0 :(得分:10)

此处的问题是,php artisan clear-compiled命令被配置为在composer.json文件中的更新过程之前运行。由于artisan是Laravel应用程序不可或缺的一部分,因此当应用程序代码出现问题时,它会抱怨。由于您有一个尚未出现的类的引用,它将吐出RuntimeException。您可以通过将该命令从pre-update-cmd列表移至post-update-cmd中的composer.json列表来解决此问题。

所以改变这个:

"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"
    ]
},

现在,clear-compiled命令将在更新过程之后运行,此时引用的LaravelFacebookSdkServiceProvider类存在,因此不会再出现错误。

答案 1 :(得分:6)

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

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

运行composer install时,它将确保安装json文件中的所有内容,包括刚添加的软件包。这就是你要找的东西。