繁体   English   中英

composer软件包:如何要求供应商lib自动加载

[英]composer package : how to require vendor lib autoload

大约一年前,我已经开了一个关于我喜欢的作曲家软件包的问题:jobby(它可以管理PHP中的CRON任务): 请参阅问题

我对此软件包的问题是,作曲家供应商的lib硬编码在名为BackgroundJob.php的文件中( 请参阅file

if (file_exists('vendor/autoload.php')) {
    require('vendor/autoload.php');
} else {
    require(dirname(dirname(dirname(dirname(dirname(__DIR__))))) . '/vendor/autoload.php');
}

但是我的供应商目录不是“ vendor”,而是“ php / lib”,并且不能转让;)

我的丑陋解决方案是自动加载文件的硬代码路径,但是每次安装lib时,我都必须手动编辑BackgroundJob.php。

由于供应商lib可以是任何深度,我真的在徘徊什么是解决此问题的最佳方法:显然Jobby不是唯一一个需要运行composer中其他库的软件包。 您能指出我要处理的图书馆吗,这样我就可以看看或给我您的想法吗?

谢谢

我认为没有干净或好的解决方案将您不拥有的软件包安装到vendor以外的其他目录中,因为这是一个非常糟糕的主意。 这是由作曲家设计的! 这是使作曲家很棒的一件事。 有一篇很好的文章介绍了为什么将软件包安装到除vendor以外的目录中是一个坏主意。

如果您确实有很好的理由,而不仅仅是“但我想...”,而您确实确实需要这样做(我建议您不要这样做!),那么您可以使用作曲家脚本做一些技巧。 应该有可能运行post-package-updatepost-package-install脚本,以将软件包从供应商移动到所需目录。

但是请记住,每个开发人员都会讨厌您这样做。 有一些原因使vendor成为第三方软件包的唯一目录。 这不仅仅是娱乐的限制。

这是一个不好的解决方案,但是可以解决这个问题:

分叉该项目=>更改代码=>制作您的自定义包

以后,您可以安装自己的自定义软件包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM