YII2經過composer優化vendor

本文討論經過composer工具安裝Yii2框架並優化Vendor過程當中遇到的問題,約定讀者對composer基本原理有必定了解,而且有安裝Yii2框架的實際經驗。php

在Yii2社區裏常常會遇到一類問題,那就是 安裝完官方推薦的版本後
1 爲何沒有vendor文件夾?html

在Yii2 中,vendor是composer下載的依賴庫文件,官方的項目模板代碼裏只有其本身的項目文件,而其依賴的yii框架等類庫,都記錄在composer.json裏面,只要安裝好composer,而後install或update便可。jquery

2 本身安裝的Yii2的項目中,vendor中的包在composer.json 中找不到對應,而這些包大可能是暫時不須要用到的,該如何remove,保持vendor最小化?
驗證過的場景json

2.1 使用 composer remove 刪除包
所刪除的包必須在vendor文件夾下的composer.json中有記錄,而且在刪除包的同時,全部的包會從新安裝一次。segmentfault

2.2 使用 composer update --no-dev 刪除包網絡

開發模式下的包會直接被刪除,刪除後運行項目,直接報錯。所以開發模式的包不能被所有刪除app

vendor.jpg

composer.jpg

2.3使用 remove codeception/verify 刪除包,大部分測試模式下的包均被刪除,根據個人以往開發經驗,單元測試相關的組件沒有使用到,因此能夠 remove codeception/verify 命令對Yii2的compposer包進行精簡。這個命令是優化composer包的關鍵一環。composer

3 多個項目在一個工程下時,會不會由於首次加載composer包太多而引發加載的性能問題, 自帶的延遲加載是否可以解決這個問題?框架

項目明顯不須要的組件能夠直接remove處理掉,至於性能性能影響暫時尚未遇到過。延遲加載算是框架級別的優化,我選擇相信它的能力yii

4 vendor路徑問題形成的目錄或文件不存在提示

假設咱們的項目路徑是 E:sourcestemplates

在Vendor路徑有問題時,會出現如下相似的問題,即某個composer包不存在

Invalid Parameter – yiibaseInvalidParamException
The file or directory to be published does not exist: E:sourcestemplatesbackendvendorbower-asset/jquery/dist

文件包不存在只是表現,主要的緣由是vendor路徑和工程的配置文件不對應。

在工程的主配置文件main.php下有關於vendor的配置入口,VendorPath具體值,要結合配置文件的路徑,請參照下面的兩幅圖以及相關的路徑配置

第一幅

vendorPath.jpg

'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',

第二幅
vendorPath2.jpg

'vendorPath' => dirname(dirname(dirname(__DIR__))) . '/vendor',

總結:

咱們在使用compser時須要考慮如下三個問題

1 composer install 和composer update的區別

2 composer版本管理和穩定性

3 公共組件如何以 composer包的方式輸出和維護

如下命令區別參考網絡資料整理

composer install

應該是最經常使用的命令,composer會根據本地的composer.json安裝包,將下載的包放入項目下的vendor目錄下,同時將安裝時候的包版本信息放入到composer.lock,以便鎖定版本.

其實在install的時候,假如發現composer.lock版本和目前vendor目錄下的代碼版本是一致的,則Composer會什麼也不作,composer.lock的目的就是讓你安心在目前這個版本下工做,而不獲取最新版本的包.

composer update

composer.lock文件中的包版本會被更新,composer.json記錄的包都會被更新到最新。
composer update命令要謹慎使用。

若是組件已經使用composer引用到項目中,成爲公共組件,須要謹慎使用composer命令,固然須要專人負責維護,沒有共享操做權限。

參考文檔
Composer四種加載方式
http://nai8.me/sapper-view.ht...
https://segmentfault.com/q/10...

相關文章
相關標籤/搜索