YII2通过composer优化vendor

本文讨论通过composer工具安装Yii2框架并优化Vendor过程中遇到的问题,约定读者对composer基本原理有一定了解,并且有安装Yii2框架的实际经验。

框架安装问题

在Yii2社区里经常会遇到一类问题,那就是 安装完官方推荐的版本后

1 为什么没有vendor文件夹?

在Yii2 中,vendor是composer下载的依赖库文件,官方的项目模板代码里只有其自己的项目文件,而其依赖的yii框架等类库,都记录在composer.json里面,只要安装好composer,然后install或update即可。

2 自己安装的Yii2的项目中,vendor中的包在composer.json 中找不到对应,而这些包大多是暂时不需要用到的,该如何remove,保持vendor最小化?

2.1 使用 composer remove 删除包

所删除的包必须在vendor文件夹下的composer.json中有记录,并且在删除包的同时,所有的包会重新安装一次。

2.2 使用 composer update --no-dev 删除包

开发模式下的包会直接被删除,删除后运行项目,直接报错。因此开发模式的包不能被全部删除

vendor.jpg

composer.jpg

2.3使用 remove codeception/verify 删除包,大部分测试模式下的包均被删除,根据我的以往开发经验,单元测试相关的组件没有使用到,所以可以 remove codeception/verify 命令对Yii2的compposer包进行精简。这个命令是优化composer包的关键一环。

3 多个项目在一个工程下时,会不会因为首次加载composer包太多而引起加载的性能问题, 自带的延迟加载是否能够解决这个问题?

项目明显不需要的组件可以直接remove处理掉,至于性能性能影响暂时还没有遇到过。延迟加载算是框架级别的优化,我选择相信它的能力。

4 vendor路径问题

vendor路径问题造成的目录或文件不存在提示

假设我们的项目路径是 E:\sources\templates

在Vendor路径有问题时,会出现以下类似的问题,即某个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

文件包不存在只是表现,主要的原因是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引用到项目中,成为公共组件,需要谨慎使用composer命令,当然需要专人负责维护,不设置共享操作权限。

另外一种思路也是可以尝试的,对于软件安装包的版本,统一以官方最新的版本为主,如果由此产生兼容或者其它问题,针对性的解决新问题。


请阅读原文,获得更好的阅读体验,文中有不确切之处,欢迎留言讨论。

本文分享自微信公众号 - 图南科技(tunan_technology)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云服务器999+

腾讯云服务器99/年_史上最钜惠活动!

从今天开始,截止6月20日,腾讯云开启数字生态优惠活动,也就是年中大促活动。为期超过一个月的时间,每天五场秒杀活动,新用户优惠力度更大一些,如果我们有办法注册到...

31830
来自专栏知识分享

4-STM32物联网开发系统方案微信小程序篇

https://www.cnblogs.com/yangfengwu/p/10979101.html

56020
来自专栏云服务器999+

腾讯云服务器web环境配置教程

腾讯云服务器是现在越来越多站长以及企业建站的首选了,因为腾讯云背靠腾讯这颗大树,有10亿微信用户和10亿QQ用户流量考验验做为背书,有足够的技术实力和奖金实力让...

45430
来自专栏wordpress建站吧

wordpress搭建网站需要掌握和了解哪些知识点?

对于很多完全没有接触过wordpress和网站搭建的用户来说,还是比较难的,需要学习和了解的知识点还是很多的,但是对于稍微熟悉了的用户来说基本上就是分分钟的事儿...

18830
来自专栏知识分享

5-STM32物联网开发系统方案微信小程序篇

https://www.cnblogs.com/yangfengwu/p/11037653.html

30010
来自专栏PHP修行之路

【php设计模式】门面模式

门面模式又叫外观模式,用来隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系...

10510
来自专栏coding for love

3-2 使用loader打包静态资源(图片)

上一节我们成功打包并展示了一张图片。可是我们看到最终输出的图片名称是一串hash值,如果我们希望其展示的是原来的名称呢?可以进行如下配置:

13430
来自专栏云服务器999+

如何选择腾讯云服务器配置?

云服务器的配置选择,和网站或应用的类型、访问量、数据量大小、程序质量等因素有关,建议和您的网站或应用的开发技术人员沟通,选择最适合您的配置。

33940
来自专栏FREE SOLO

点击一个web网页的流程和所用协议(计算机网络)

客户方启动浏览器; 客户在浏览器的地址栏键入URL; 浏览器分析URL,找到信息资源所在主机地址; 与该主机(服务器)建立TCP连接(端口号80); 向...

21740
来自专栏PHP修行之路

【php设计模式】代理模式

主要解决在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控...

8910

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励