首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过composer为PHP提供脚本(作为独立的和依赖的)

如何通过composer为PHP提供脚本(作为独立的和依赖的)
EN

Stack Overflow用户
提问于 2016-02-08 13:50:56
回答 1查看 2.5K关注 0票数 3

我正在尝试编写一个PHP脚本,我想从命令行运行该脚本。我希望使用composer来管理它的依赖关系,并将其作为其他项目的依赖项来安装。我还想保持独立使用它的能力(以及它的依赖关系)。

目前,main.php是我的“入口点”(我将从命令行执行什么)。当我构建和测试它的时候,我是以“独立”的心态这么做的。这样的话,main.php需要像这样的自动加载:

代码语言:javascript
复制
<?php
require_once __DIR__.'/../vendor/autoload.php';

继续保持独立的心态,我把它设置成这样:

  1. git clone封装就位
  2. cd package
  3. composer install

这将产生以下目录设置“

代码语言:javascript
复制
package
    |-composer.json
    |
    |-src
    |   |-ClassOne.php
    |   |
    |   |-ClassTwo.php
    |   |
    |   |-main.php
    |
    |-vendor
        |-autoload.php
        |
        |-composer
        |
        |-3rdpaty_1
        |
        |-3rdpaty_2

这很好--我可以运行php src/main.php,它能够找到它需要的类,因为它加载了__DIR__.'../vendor/autoload.php'

我遇到麻烦的地方是当我希望将包安装为另一个项目的依赖项时(以便脚本可以在那里运行)。我将我的包添加到composer.json中,它就会被安装。但是,试图运行php vendor/compnay/package/src/main.php失败了,因为必要的autoload.php位于不同的位置:

代码语言:javascript
复制
dependent_project
    |-composer.json
    |
    |-some_code
    |
    |-vendor
        |-autoload.php
        |
        |-composer
        |
        |-company
        |    |-package
        |        |-composer.json
        |        |
        |        |-src
        |            |-ClassOne.php
        |            |
        |            |-ClassTwo.php
        |            |
        |            |-main.php
        |
        |-other_vendor_1
        |
        |-other_vendor_2

我明白是怎么回事,但我不知道怎么解决。如何用作曲家来提供这样的东西呢?我已经搜索了很多,但我没有看到有人问或回答同样的问题。我注意到了bin属性composer.json,并开始研究这个想法,但我仍然没有找到很多关于如何正确设置脚本以找到它在不同上下文中需要的信息。

我考虑过尝试在include中使用if,并在失败的情况下运行第二个include到另一个路径,但这似乎不是正确的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-08 13:54:13

一个常见的做法是查看这两个位置的一个自动加载文件。例如,请参见贝帽使用的这个片段

代码语言:javascript
复制
function includeIfExists($file)
{
    if (file_exists($file)) {
        return include $file;
    }
}
if ((!$loader = includeIfExists(__DIR__.'/../vendor/autoload.php')) && (!$loader = includeIfExists(__DIR__.'/../../../autoload.php'))) {
    fwrite(STDERR,
        'You must set up the project dependencies, run the following commands:'.PHP_EOL.
        'curl -s http://getcomposer.org/installer | php'.PHP_EOL.
        'php composer.phar install'.PHP_EOL
    );
    exit(1);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35271282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档