可以从(自动)加载中抑制单个Composer依赖项吗?

时间:2015-07-07 09:40:22

标签: php composer-php

我有一个项目,其中包含以下composer.json个依赖项:

"propel/propel1": "dev-master"`,
"halleck45/phpmetrics": "dev-master"

我最近做了一个composer update,发现PhpMetrics所需的新版本的库叫做Hoa,引入了一个新的类\EngineException来模拟一个新的PHP7类。不幸的是,Propel 1还定义了\EngineException,因此会产生冲突。

对此的正确解决方法是升级到使用名称空间的Propel 2。然而,这仍然是阿尔法并且受到BC休息的影响,因此对我来说并不可行。

我目前的解决方法是将Hoa锁定到没有新类的特定版本:

"hoa/core": "2.15.04.*"

这不是一个糟糕的解决方案,但将图书馆锁定到旧版本并不完全令人满意。

在Hoa代码中,不加载新类的唯一方法是运行PHP 7,这也是不可行的。但是,当PhpMetrics运行时,Hoa只需要require d。这是一个独立的代码分析工具,为方便起见,它只位于项目的根目录中;项目的其余部分不使用此库。

因此,如果我可以在Composer中调用某个东西来要求这个类没有(自动)加载,或者可能在composer.json中做同样的事情,那就太好了。它目前正在被不必要地加载 - 我不知道它是否被错误地自动加载或者是否由Composer手动require

可能有助于了解Composer将Hoa类添加到自动生成的autoload_psr4.php脚本中。据我所知understand the docs,这意味着它是自动加载的,我的项目中没有任何内容需要任何Hoa类。

2 个答案:

答案 0 :(得分:3)

https://github.com/hoaproject/Core/commit/8ed00fe9345c4f8b2679a256926d6d24994ea842修正。

  

PHP7 [1]中引入的新异常架构完全是   重新设计[2]。此修补程序更新了复古兼容性类   根据这个新架构。因此,BaseException   已删除类,以及EngineException和。{   ParseException。虽然这些后者可以实施(而不是   到目前为止,我们更喜欢只实现Throwable接口。   让我们看看我们是否可以实现(仍为复古兼容性)   ErrorTypeErrorParseError类。

     

[1]:https://wiki.php.net/rfc/engine_exceptions_for_php7

     

[2]:rfc / throwable-interface

答案 1 :(得分:2)

我很好奇,所以我查了一下。 Hoa确实有一个破碎的方法,文件Core.php总是包含在作曲家的"file" autoload中,而class_exists又包括Consistency.php。后者定义了你的班级。

您可以向Hoa的开发人员提出问题,使用this检查方法而不是他们正在使用的当前版本检查。这可能导致推进式自动装载机加载自己的。另一种方法是正确定义自动加载,但他们更喜欢手动加载。