最近,我安装了一个包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文件中的所有内容都已安装,包括您刚刚添加的包。这就是你想要的。