本文讨论经过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
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' => dirname(dirname(__DIR__)) . '/vendor',
第二幅
'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...