Composer

laravel 如何覆盖composer的 vendor类文件?

作为 Laravel 开发人员,你可能遇到过这样的情况:你不喜欢 vendor 文件夹某个包中的某些代码,并且想要更改它。你可以直接在该文件中更改它。但问题是当你点击composer update命令升级包时很容易覆盖已修改的vendor类文件。
那么有什么解决办法呢?
感谢Composer,它具有覆盖任何包/类的功能。Composer 使用PSR-4来加载类。因此,在 composer.json 中,你可以提及从哪些文件或文件夹加载类。同样你也可以排除加载它。

操作步骤:

windows用户

排除文件

请参考下面的示例以了解我如何从包tymon/jwt-auth 中排除 1个文件

"exclude-from-classmap": ["vendor\\tymon\\jwt-auth\\src\\Middleware\\BaseMiddleware.php"],

在上面的例子中可以看出我已经排除了BaseMiddleware.php文件。你必须将此行放在composer.json的autoload段中。这里要注意的一件事是,我在路径中有双反斜杠,那是因为在 Windows 机器上,并且因为它是 JSON 文件,所以我必须在那里转义 (\) ,即写上双反斜杠。

包含文件以覆盖vendor

现在我们已经排除了我们想要覆盖的文件,现在需要包含有更改的新文件,以便 composer 知道要包含哪些文件。

为此,向 composer.json 中的 'psr-4' …

        

移除无用的Composer加载文件,以提升性能。

一些PHP项目通过Composer安装了一些组件 ,其中有一些是针对特定PHP版本或PHP扩展的polyfill,如果我们的PHP版本满足安求,相关的PHP扩展也已安装好 。那么就不需要安装这些polyfill了。

我们可以通过移除这些polyfill,以减少自动加载的文件数量,达到优化性能的目的。

示例:

请在项目的composer.json中加入如下以下内容:即可移除对应的无用组件,减少加载时间。

"replace": {
"symfony/polyfill-apcu": "*",
"symfony/polyfill-php80": "*",
"symfony/polyfill-mbstring": "*",
"symfony/polyfill-ctype": "*",
"symfony/polyfill-php73": "*",
"symfony/polyfill-php72": "*",
"symfony/polyfill-php81": "*"
},

                

Composer 2.0 发布了!

1 /有什么新功能?

变更和改进的清单很长,如果您有兴趣阅读全部内容,请查看完整的变更日志。我将在这里重点介绍一些关键点。

性能提升

从Composer和packagist.org之间使用的协议到依赖关系解析,我们几乎对所有内容进行了全面检查,包括使用curl和约束评估优化来并行下载文件。这导致速度和内存使用方面的巨大改进。差异取决于您的用例,因此尽管我看到某些项目的两个方面的改进都超过50%的报告,但我无法在上面给出确切的数字。但是我敢肯定,如果您还没有尝试过Composer 2,将会感到非常惊讶。

作为补充,require/remove和部分更新现在快得多,因为Composer现在将仅加载要更改的程序包的元数据。…

        

使用Composer时的PHP部署最佳实践

Composer是PHP应用程序的事实依赖管理器,最初在大约8年前于2012年3月发布。

在PHP中使用Composer可用于提高代码的可重用性,并使您的项目能够轻松地集成来自主要PHP Composer仓库Packagist的维护的PHP库。今天,我们将重点介绍一些部署最佳实践。

composer会变慢

这篇文章将重点介绍如何使Composer更快,以及在每次部署应用程序时无需重新安装Composer就可以安装软件包。

Magento是需要大量内存的Composer项目的一个示例。您能想象如果需要为每个部署进行composer安装时需要多少内存?Composer可能会因“内存不足”错误而失败,此错误将在此Stack Overflow帖子中进行介绍

尽管将软件包添加到项目很容易,但出于以下原因,在Amezmo,我们采用保守的方法添加新的项目依赖项。

  • 减慢初始 composer install
  • 每个composer软件包都会增加出现新安全问题的机会

最佳实践

这是不言而喻的。审核我们的composer.json文件,当然删除所有不需要的程序包引用。

第二个,这就是我发表这篇文章的原因,是要确保您使用以下标志运行composer。

composer
    --no-ansi \
    --no-interaction \
    --optimize-autoloader \
    --no-progress 
        

推荐六个鲜为人知的 Composer 命令

Composer 是 PHP 的一个依赖管理工具。 如果你是一名 PHP 开发人员,那么你很可能每天都在使用它并且频繁的运行命令 require, install 和 update。也许你并没有意识到, 我们可以使用一些其他的 Composer 命令,来更加轻松的使用它。

它有许多的命令可以使用,但今天我将分享我使用的并且每天都有帮助的 6 个命令。…

深入解析 composer 的自动加载原理

前言

PHP 自5.3的版本之后,已经重焕新生,命名空间、性状(trait)、闭包、接口、PSR 规范、以及 composer 的出现已经让 PHP 变成了一门现代化的脚本语言。PHP 的生态系统也一直在演进,而 composer 的出现更是彻底的改变了以往构建 PHP 应用的方式,我们可以根据 PHP 的应用需求混合搭配最合适的 PHP 组件。当然这也得益于 PSR 规范的提出。


大纲

  • PHP 自动加载功能
  • PSR 规范
  • comoposer 的自动加载过程
  • composer 源码分析

一、PHP 自动加载功能

PHP 自动加载功能的由来

在 PHP 开发过程中,如果希望从外部引入一个 Class ,通常会使用 include 和 require