资讯专栏INFORMATION COLUMN

YII2通过composer优化vendor

dcr309duan / 1450人阅读

摘要:本文讨论通过工具安装框架并优化过程中遇到的问题,约定读者对基本原理有一定了解,并且有安装框架的实际经验。这个命令是优化包的关键一环。命令要谨慎使用。

本文讨论通过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 删除包

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

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

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

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

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...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25744.html

相关文章

  • Yii2中的代码自动加载机制

    摘要:中是如何实现代码的自动加载的入口脚本的以下两行代码其中的作用注册为自动加载函数。这个负责引入了一个类中的,随后立即解除注册。注册中的为自动加载函数,并利用配置文件即目录下的文件对这个自动加载函数进行了初始化。 1.基本知识 Include与require 的作用: 当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何...

    Jaden 评论0 收藏0
  • Yii修行之路 - Extension 扩展

    摘要:运行来安装指定的扩展。这更便于用户辨别是否是的扩展。当用户运行安装一个扩展时,文件会被自动更新使之包含新扩展的信息。上述代码表明该扩展依赖于包。例如,上述的条目声明将对应于别名。为达到这个目的,你应当在公开发布前做测试。 简述 扩展是专门设计的在 Yii 应用中随时可拿来使用的, 并可重发布的软件包。 基础 例如, yiisoft/yii2-debug 扩展在你的应用的每个页面底部添加...

    bovenson 评论0 收藏0
  • PHP回顾之Composer

    摘要:本文简要回顾相关概念和用法。相比之下已是明日黄花。分别对应的命令是根据关键字查找依赖包,例如查找本人发布的包。作为目前包依赖管理的最佳工具,值得每一位开发人员掌握。 转载请注明文章出处:https://tlanyan.me/php-review... PHP回顾系列目录 PHP基础 web请求 cookie web响应 session 数据库操作 加解密 Composer是PHP...

    Ocean 评论0 收藏0
  • 使用Codeception进行Yii2的单元测试(一)安装以及简介篇

    摘要:一简介作为工程师,我们很可能遇到一些有必要的进行单元测试的场景。本系列文章就来介绍下,在框架下,如何使用进行单元测试。 一、简介 作为php工程师,我们很可能遇到一些有必要的进行单元测试的场景。本系列文章就来介绍下,在Yii2框架下,如何使用Codeception进行单元测试。本篇就首先介绍Yii2,以及Codeception的安装。 二、Yii2和codeception安装 安装Yi...

    dabai 评论0 收藏0
  • Yii2:教你一步步写一个微信商城(一)

    摘要:本教程主要基于大神的开源商城,为大家解读的源码,由于原版商城更多是针对国际业务,因此本教程会适当修改,使其更适合于微信环境。 本教程主要基于 terry 大神的开源商城 Fecshop,为大家解读 Fecshop 的源码,由于原版商城更多是针对国际业务,因此本教程会适当修改,使其更适合于微信环境。由于商城源码复杂,本教程将长期更新。本人也是边学习边写这份教程,过程中难免会出现错误,还请...

    Invoker 评论0 收藏0

发表评论

0条评论

阅读需要支付1元查看
<