本文討論通過composer工具安裝Yii2框架并優(yōu)化Vendor過程中遇到的問題念颈,約定讀者對composer基本原理有一定了解,并且有安裝Yii2框架的實際經(jīng)驗连霉。
框架安裝問題
在Yii2社區(qū)里經(jīng)常會遇到一類問題榴芳,那就是 安裝完官方推薦的版本后
1 為什么沒有vendor文件夾?
在Yii2 中跺撼,vendor是composer下載的依賴庫文件窟感,官方的項目模板代碼里只有其自己的項目文件,而其依賴的yii框架等類庫歉井,都記錄在composer.json里面柿祈,只要安裝好composer,然后install或update即可哩至。
2 自己安裝的Yii2的項目中躏嚎,vendor中的包在composer.json 中找不到對應(yīng),而這些包大多是暫時不需要用到的菩貌,該如何remove卢佣,保持vendor最小化?
驗證過的場景
2.1 使用 composer remove 刪除包
所刪除的包必須在vendor文件夾下的composer.json中有記錄箭阶,并且在刪除包的同時虚茶,所有的包會重新安裝一次。
2.2 使用 composer update --no-dev 刪除包
開發(fā)模式下的包會直接被刪除仇参,刪除后運行項目媳危,直接報錯。因此開發(fā)模式的包不能被全部刪除
2.3使用 remove codeception/verify 刪除包冈敛,大部分測試模式下的包均被刪除待笑,根據(jù)我的以往開發(fā)經(jīng)驗,單元測試相關(guān)的組件沒有使用到抓谴,所以可以 remove codeception/verify 命令對Yii2的compposer包進行精簡暮蹂。這個命令是優(yōu)化composer包的關(guān)鍵一環(huán)。
3 多個項目在一個工程下時癌压,會不會因為首次加載composer包太多而引起加載的性能問題仰泻, 自帶的延遲加載是否能夠解決這個問題?
項目明顯不需要的組件可以直接remove處理掉滩届,至于性能性能影響暫時還沒有遇到過集侯。延遲加載算是框架級別的優(yōu)化,我選擇相信它的能力
4 vendor路徑問題
vendor路徑問題造成的目錄或文件不存在提示
假設(shè)我們的項目路徑是 E:\sources\templates
在Vendor路徑有問題時,會出現(xiàn)以下類似的問題棠枉,即某個composer包不存在
Invalid Parameter – yii\base\InvalidParamException
The file or directory to be published does not exist: E:\sources\templates\backend\vendor\bower-asset/jquery/dist
文件包不存在只是表現(xiàn)浓体,主要的原因是vendor路徑和工程的配置文件不對應(yīng)。
在工程的主配置文件main.php下有關(guān)于vendor的配置入口辈讶,VendorPath具體值命浴,要結(jié)合配置文件的路徑,請參照下面的兩幅圖以及相關(guān)的路徑配置
第一幅
'vendorPath' => dirname(dirname(DIR)) . '/vendor',
第二幅
'vendorPath' => dirname(dirname(dirname(DIR))) . '/vendor',
總結(jié)
我們在使用compser時需要考慮以下三個問題
1 composer install 和composer update的區(qū)別
2 composer版本管理和穩(wěn)定性
3 公共組件如何以 composer包的方式輸出和維護
composer install
應(yīng)該是最常用的命令,composer會根據(jù)本地的composer.json安裝包,將下載的包放入項目下的vendor目錄下,同時將安裝時候的包版本信息放入到composer.lock,以便鎖定版本.
其實在install的時候,假如發(fā)現(xiàn)composer.lock版本和目前vendor目錄下的代碼版本是一致的,則Composer會什么也不做,composer.lock的目的就是讓你安心在目前這個版本下工作,而不獲取最新版本的包.
composer update
composer.lock文件中的包版本會被更新贱除,composer.json記錄的包都會被更新到最新生闲。
這個命令要謹慎使用。
如果組件已經(jīng)使用composer引用到項目中月幌,成為公共組件碍讯,需要謹慎使用composer命令,當然需要專人負責(zé)維護扯躺,不設(shè)置共享操作權(quán)限捉兴。
另外一種思路也是可以嘗試的,對于軟件安裝包的版本缅帘,統(tǒng)一以官方最新的版本為主轴术,如果由此產(chǎn)生兼容或者其它問題,針對性的解決新問題钦无。
參考文檔
Composer四種加載方式
https://segmentfault.com/q/1010000004047286/a-1020000005344768