【问题标题】:composer package : how to require vendor lib autoload作曲家包:如何要求供应商库自动加载
【发布时间】:2015-10-22 21:12:28
【问题描述】:

大约一年前我打开了一个关于我喜欢的作曲家包的问题:jobby(它允许在 PHP 中管理 CRON 任务):see issue

我对这个包的问题是作曲家供应商的库被硬编码在一个名为 BackgroundJob.php (see file) 的文件中

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

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

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

由于供应商库可以是任何深度,我真的在徘徊这个问题的好解决方案是什么:显然 Jobby 不是唯一需要运行 composer 的其他库的包。您能否指点我一个处理该问题的库,以便我可以查看它或给我您的想法?

谢谢

【问题讨论】:

    标签: php composer-php autoload


    【解决方案1】:

    这是一个糟糕的解决方案,但要做到这一点:

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

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

    【讨论】:

    • 这一年我想了想,然后我告诉自己:去尝试做个好方法吧:)
    【解决方案2】:

    我认为将不属于您自己的软件包安装到 vendor 以外的其他目录中,既没有干净也没有好的解决方案,因为这是一个非常糟糕的主意。这是作曲家的设计!这是让作曲家很棒的一件事。有一个 nice article 说明为什么将软件包安装到 vendor 以外的目录是一个坏主意。

    如果你有很好的理由,而不仅仅是“但我想......”而且你真的需要这样做(我建议不要这样做!)但是你可以用composer scripts做一些技巧.应该可以运行 post-package-updatepost-package-install 脚本将包从供应商移动到您想要的目录。

    但请记住,每个开发人员都会讨厌你这样做。 vendor 是第三方软件包的唯一目录是有原因的。这不仅仅是为了好玩。

    【讨论】:

    • 我理解您的解释,但是当我开始与作曲家合作时,我看到“vendor-dir”选项可用。如果某些库必须使用此目录,则应将其删除,或者至少应在其上设置一个非常大的警告标志! ?
    • 但是vendor-dir 选项并不意味着用户可以安装到除vendor 之外的另一个目录中。请问你为什么你的项目使用php/lib而不是vendor,即使你说它是不可协商的?也许改变它比破坏作曲家的所有优势更容易。
    猜你喜欢
    • 2018-11-27
    • 2019-02-05
    • 1970-01-01
    • 2016-08-30
    • 2019-02-11
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    相关资源
    最近更新 更多