更新:
@H_502_1@我实际发布了这个包,所以你可以自己看问题.
@H_502_1@在这里查看naomik/yamldump
@H_502_1@我正在尝试制作一个小的CLI工具并将其与作曲家打包在一起.
@H_502_1@下面是该程序的一个非常简化的版本,但它足以证明我遇到的问题.
@H_502_1@该项目有一个依赖项和一个“二进制”文件
@H_502_1@composer.json
>〜/ .composer / vendor / naomik / yamldump /
>〜/ .composer / vendor / symfony / yaml / @H_502_1@这是一个问题,因为我不打算全局安装symfony / yaml,我的软件包的vendor / autoload.PHP无法在正确的位置找到Yaml软件包. @H_502_1@我不介意symfony / yaml是全局安装的,但是对我来说有意义的是,composer global require会安装这样的包: @H_502_1@>〜/ .composer / vendor / bin / yamldump – > ../naomik/yamldump/bin/yamldump
>〜/ .composer / vendor / naomik / yamldump /
>〜/ .composer / vendor / naomik / yamldump / vendor / symfony / yaml / @H_502_1@毕竟,如果我有依赖于symfony / yaml = 2.5.3的Package A和需要symfony / yaml = 2.6.x的Package B怎么办? @H_502_1@如果composer global要求安装〜/ .composer / vendor / *的依赖项,那么每个全局需要的包都无法维护它自己的依赖项版本要求…… @H_502_1@我知道这是一个令人费解的问题,但我真的不知道如何开始修复它. @H_502_1@目标 @H_502_1@用户应该能够
{ "name": "naomik/yamldump","version": "0.2.0","bin": [ "bin/yamldump" ],"require": { "symfony/yaml": "2.5.3" } }@H_502_1@斌/ yamldump
#!/usr/bin/env PHP <?PHP // use Yaml namespace use Symfony\Component\Yaml as Yaml; // autoload require_once "vendor/autoload.PHP"; // read yaml $yaml = file_get_contents(sprintf("%s/%s",getcwd(),$argv[1])); // create parser $parser = new Yaml\Parser(); // parse the yaml var_dump($parser->parse($yaml));@H_502_1@因此,当我在全球范围内安装它时,我就明白了
$composer global require naomik/yamldump=dev-master@H_502_1@文件已安装到 @H_502_1@>〜/ .composer / vendor / bin / yamldump – > ../naomik/yamldump/bin/yamldump
>〜/ .composer / vendor / naomik / yamldump /
>〜/ .composer / vendor / symfony / yaml / @H_502_1@这是一个问题,因为我不打算全局安装symfony / yaml,我的软件包的vendor / autoload.PHP无法在正确的位置找到Yaml软件包. @H_502_1@我不介意symfony / yaml是全局安装的,但是对我来说有意义的是,composer global require会安装这样的包: @H_502_1@>〜/ .composer / vendor / bin / yamldump – > ../naomik/yamldump/bin/yamldump
>〜/ .composer / vendor / naomik / yamldump /
>〜/ .composer / vendor / naomik / yamldump / vendor / symfony / yaml / @H_502_1@毕竟,如果我有依赖于symfony / yaml = 2.5.3的Package A和需要symfony / yaml = 2.6.x的Package B怎么办? @H_502_1@如果composer global要求安装〜/ .composer / vendor / *的依赖项,那么每个全局需要的包都无法维护它自己的依赖项版本要求…… @H_502_1@我知道这是一个令人费解的问题,但我真的不知道如何开始修复它. @H_502_1@目标 @H_502_1@用户应该能够
$composer global require naomik/yamldump=dev-master $yamldump sample.yml@H_502_1@错误
$yamldump sample.yml Warning: require_once(vendor/autoload.PHP): Failed to open stream: No such file or directory in /Users/naomik/.composer/vendor/naomik/yamldump/bin/yamldump on line 8 Fatal error: require_once(): Failed opening required 'vendor/autoload.PHP' (include_path='.:') in /Users/naomik/.composer/vendor/naomik/yamldump/bin/yamldump on line 8@H_502_1@这个问题 @H_502_1@这是黑色&白色: @H_502_1@我打算如何编写require“vendor / autoload.PHP”行并让它适用于本地安装的软件包和全局安装的软件包?
定位vendor / autoload.PHP通常不是一个好主意,只有从正确的目录运行脚本才有效.以下内容应该更好地为您服务:
原文链接:https://www.f2er.com/php/134341.htmlrequire_once __DIR__.'/../vendor/autoload.PHP';@H_502_1@但是,如果您的应用程序作为依赖项安装,这仍然可能是一个问题.在这种情况下,您可能需要更实质的东西:
if ( (!$classLoader = includeIfExists(__DIR__.'/../vendor/autoload.PHP')) && (!$classLoader = includeIfExists(__DIR__.'/../../../autoload.PHP')) ) { echo 'You must set up the project dependencies,run the following commands:'.PHP_EOL. 'curl -sS https://getcomposer.org/installer | PHP'.PHP_EOL. 'PHP composer.phar install'.PHP_EOL; exit(1); }@H_502_1@如果您直接在应用程序上工作,首先会在您希望的位置查找自动加载器.如果不存在,那么如果您的应用程序作为依赖项安装,它将查看自动加载器的位置.