加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何配置要全局安装的composer包?

发布时间:2020-12-13 18:02:34 所属栏目:PHP教程 来源:网络整理
导读:更新: 我实际发布了这个包,所以你可以自己看问题. 在这里查看naomik/yamldump 我正在尝试制作一个小的CLI工具并将其与作曲家打包在一起. 下面是该程序的一个非常简化的版本,但它足以证明我遇到的问题. 该项目有一个依赖项和一个“二进制”文件 composer.jso
更新:

我实际发布了这个包,所以你可以自己看问题.

在这里查看naomik/yamldump

我正在尝试制作一个小的CLI工具并将其与作曲家打包在一起.

下面是该程序的一个非常简化的版本,但它足以证明我遇到的问题.

该项目有一个依赖项和一个“二进制”文件

composer.json

{
  "name": "naomik/yamldump","version": "0.2.0","bin": [
    "bin/yamldump"
  ],"require": {
    "symfony/yaml": "2.5.3"
  }
}

斌/ yamldump

#!/usr/bin/env php
<?php

// use Yaml namespace
use SymfonyComponentYaml as Yaml;

// autoload
require_once "vendor/autoload.php";

// read yaml
$yaml = file_get_contents(sprintf("%s/%s",getcwd(),$argv[1]));

// create parser
$parser = new YamlParser();

// parse the yaml
var_dump($parser->parse($yaml));

因此,当我在全球范围内安装它时,我就明白了

$composer global require naomik/yamldump=dev-master

文件已安装到

>?/ .composer / vendor / bin / yamldump – > ../naomik/yamldump/bin/yamldump
>?/ .composer / vendor / naomik / yamldump /
>?/ .composer / vendor / symfony / yaml /

这是一个问题,因为我不打算全局安装symfony / yaml,我的软件包的vendor / autoload.php无法在正确的位置找到Yaml软件包.

我不介意symfony / yaml是全局安装的,但是对我来说有意义的是,composer global require会安装这样的包:

>?/ .composer / vendor / bin / yamldump – > ../naomik/yamldump/bin/yamldump
>?/ .composer / vendor / naomik / yamldump /
>?/ .composer / vendor / naomik / yamldump / vendor / symfony / yaml /

毕竟,如果我有依赖于symfony / yaml = 2.5.3的Package A和需要symfony / yaml = 2.6.x的Package B怎么办?

如果composer global要求安装?/ .composer / vendor / *的依赖项,那么每个全局需要的包都无法维护它自己的依赖项版本要求……

我知道这是一个令人费解的问题,但我真的不知道如何开始修复它.

目标

用户应该能够

$composer global require naomik/yamldump=dev-master
$yamldump sample.yml

错误

$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

这个问题

这是黑色&白色:

我打算如何编写require“vendor / autoload.php”行并让它适用于本地安装的软件包和全局安装的软件包?

定位vendor / autoload.php通常不是一个好主意,只有从正确的目录运行脚本才有效.以下内容应该更好地为您服务:
require_once __DIR__.'/../vendor/autoload.php';

但是,如果您的应用程序作为依赖项安装,这仍然可能是一个问题.在这种情况下,您可能需要更实质的东西:

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);
}

如果您直接在应用程序上工作,首先会在您希望的位置查找自动加载器.如果不存在,那么如果您的应用程序作为依赖项安装,它将查看自动加载器的位置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读