溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Laravel如何解決composer相關(guān)操作提示php異常的問(wèn)題

發(fā)布時(shí)間:2021-07-21 09:59:46 來(lái)源:億速云 閱讀:169 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Laravel如何解決composer相關(guān)操作提示php異常的問(wèn)題,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

Laravel 的一大特色就是使用 composer 來(lái)管理依賴(lài)包,這使得整個(gè)項(xiàng)目的升級(jí)、擴(kuò)展變得異常容易。一般情況下,只需要我們輸入幾個(gè)命令并按下回車(chē),就能完成插件包的安裝、更新以及卸載工作。

但有時(shí)候你會(huì)碰到一種比較有意思的問(wèn)題。那就是使用 composer 進(jìn)行相關(guān)安裝、更新插件操作的時(shí)候,卻報(bào) PHP 程序異常。比如,github中一個(gè)項(xiàng)目,在你上次更新之后上游代碼又加入新功能,使用了一個(gè)新的依賴(lài)包。這時(shí)你使用git pull更新代碼后,依賴(lài)包并沒(méi)有安裝,那么再用composer update 來(lái)更新這個(gè)必要的包時(shí),卻會(huì)因?yàn)轫?xiàng)目程序中缺少這個(gè)包而報(bào)錯(cuò)……(說(shuō)得有點(diǎn)兒繞),如此就陷入了一種想要安裝這個(gè)包卻報(bào)異常,而想要解決這異常又正好需要裝這個(gè)包的死循環(huán)里了。

其實(shí)造成這種問(wèn)題的原因就藏在項(xiàng)目根目錄下那個(gè) composer.json 文件里,稍微看一下就會(huì)發(fā)現(xiàn),其中有一個(gè) scripts 屬性(內(nèi)容見(jiàn)下方代碼),其中設(shè)置了項(xiàng)目創(chuàng)建后、根包安裝后、插件包安裝前和安裝后要自動(dòng)完成的操作,它們大多是php artisan命令,而這些命令是由程序中 Console 組件驅(qū)動(dòng)的,當(dāng)程序發(fā)生異常,它們也就無(wú)法運(yùn)行,于是當(dāng) composer 操作調(diào)起這些命令時(shí)就出現(xiàn)異常了。

"scripts": {
  "post-root-package-install": [
   "php -r \"copy('.env.example', '.env');\""
  ],
  "post-create-project-cmd": [
   "php artisan key:generate"
  ],
  "post-install-cmd": [
   "php artisan clear-compiled",
   "php artisan optimize"
  ],
  "pre-update-cmd": [
   "php artisan clear-compiled"
  ],
  "post-update-cmd": [
   "php artisan optimize"
  ]
 },

在了解了原因之后,再來(lái)說(shuō)解決辦法就不難理解了,有兩種辦法:

第一種方法比較笨,就是在其它空項(xiàng)目里安裝這個(gè)包(或者找到以前裝過(guò)的現(xiàn)成的),然后把源碼復(fù)制到vendor目錄后,最后使用 composer dump-autoloat --optimize 更新自動(dòng)加載文件。

第二種則比較容易,因?yàn)樗轻槍?duì)造成這個(gè)問(wèn)題的原因來(lái)對(duì)癥下藥的。

具體操作就是先刪除上面提到的 scripts并保存 composer.json,然后進(jìn)行需要的 comoser 操作,完成后再將刪除的 scripts 部分加回去去。

需要注意的是,因?yàn)檫@次 composer 操作時(shí)沒(méi)有自動(dòng)運(yùn)行 scripts 里那些命令,因而需要自己根據(jù)情況手動(dòng)處理一下,比如 clear-compiled,optimize 等,或者在composer.json改回去之后再進(jìn)行一次同樣的composer操作。

在laravel最新的版本中,composer.json中的pre-update-cmd這條已經(jīng)被刪除了,而這條正是引起本文中所述問(wèn)題的關(guān)鍵原因。各位可根據(jù)自己的情況手動(dòng)刪除它。

關(guān)于“Laravel如何解決composer相關(guān)操作提示php異常的問(wèn)題”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI