web-dev-qa-db-ja.com

Laravelにパッケージを正しくインストールするにはどうすればよいですか?

最近、パッケージLaravelFacebookSdkをインストールしました。


インストール

追加してcomposer.jsonを更新します

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

次に、composer updateを実行します


サービスプロバイダー

私の/config/app.phpで、LaravelFacebookSdkServiceProviderをプロバイダー配列に追加します。

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

すべてがうまくいきます。次に、それをリポジトリーにプッシュしました。


問題が発生しました!

2人目の開発者がgit pullを実行し、composer updateを実行しました

エラーになります

 SammyK\LaravelFacebookSdk\LaravelFacebookSdkServiceProvider::class,

未定義です。それは、プロバイダー配列の下の/config/app.phpで宣言したからです。

彼はコメントアウトの行に移動し、composer updateを最初に実行する必要があります。すべてが正常にインストールされたら、次に戻ってncommentその行をもう一度戻します。

他の開発者が毎回これを行う必要がありますか?新しいパッケージをインストールしましたか?

ここで何か不足していますか?

私が何か間違ったことをした場合は親切に教えてください。

18
cyber8200

ここでの問題は、php artisan clear-compiledファイルの更新プロセスの前に実行するように構成されているcomposer.jsonコマンドがあることです。そして、artisanはLaravelアプリの不可欠な部分なので、アプリのコードに問題があると文句を言うでしょう。まだではないクラスへの参照があるので、存在する場合、そのRuntimeExceptionを吐き出します。そのコマンドをpre-update-cmdリストからpost-update-cmdcomposer.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"
    ]
},

参照されたLaravelFacebookSdkServiceProviderクラスが存在する場合、更新プロセスの後にclear-compiledコマンドが実行されるため、エラーは発生しなくなります。

10
Bogdan

composer updateを実行する代わりに、composer installを実行します。 jsonファイルのコマンドを変更する必要はありません。

composer updateを実行すると、すべてのパッケージが処理され、composer.jsonに基づいて最新のマイナーバージョンに更新されてから、composer.lockが更新されます。これはあなたが望むものではありません。

composer installを実行すると、追加したパッケージを含め、jsonファイルのすべてがインストールされていることを確認できます。これはあなたが探しているものです。

7
jfadich