php - Composer : library which requires a library

标签 php composer-php

我正在尝试创建一个包含其他库的 PHP 库,我敢打赌我遗漏了一些基本的东西。

使用 AWS PHP SDK作为指南,我想创建一个库,在使用 Composer 安装后,它需要其他库,但是类的整个范围(包括当前库和所需库)都可以通过使用 require 来获得'vendor/autoload.php;'.

设置它的基本要求是什么?这是配置 composer.json 的问题,以特定方式命名空间,还是两者兼而有之?

最佳答案

您所描述的正是 Composer 的主要目的 - 定义可能需要并实现其他包的代码包。

使用 AWS 开发工具包作为指南,如果您查看提供所有 Composer 配置信息的 composer.json 文件,您将看到两个 require block ,一个标记为 require,另一个标记为require-dev:

"require": {
    "php": ">=5.5",
    "guzzlehttp/guzzle": "^5.3.1|^6.2.1",
    "guzzlehttp/psr7": "^1.4.1",
    "guzzlehttp/promises": "~1.0",
    "mtdowling/jmespath.php": "~2.2"
},
"require-dev": {
    "ext-openssl": "*",
    "ext-pcre": "*",
    "ext-spl": "*",
    "ext-json": "*",
    "ext-dom": "*",
    "ext-simplexml": "*",
    "phpunit/phpunit": "^4.8.35|^5.4.0",
    "behat/behat": "~3.0",
    "doctrine/cache": "~1.4",
    "aws/aws-php-sns-message-validator": "~1.0",
    "nette/neon": "^2.3",
    "andrewsville/php-token-reflection": "^1.4",
    "psr/cache": "^1.0"
},

这就是您定义库所依赖的其他包/库的方式。 require 部分列出了安装库时必须安装的所有其他库。 require-dev 部分列出了仅当您在开发环境中工作时可能需要的库,而在您的生产环境中则不需要。

当您指定其他需要的库时,Composer 将安装您的库,然后出去并要求您的库需要的库(然后是这些库需要的库,依此类推)。

还包含在要包含的库中,您会注意到版本号也包含在内,以确保兼容性。

我发现添加新依赖项的最简单方法是在命令行上,使用 composer require 命令,记录在此处:https://getcomposer.org/doc/03-cli.md#require .该命令可帮助您在您不完全了解所需的软件包时搜索它,并可以自动为您解析最新版本(如果需要/想要,您可以覆盖)。

如果您希望只需要开发依赖项,请在运行命令时添加 --dev 标志。

使用此命令,Composer 将自动更新您的 composer.json 文件,将依赖项拉到本地机器上,并更新您的自动加载器。

除了 require_once vendor/autoload.php 之外,您永远不需要做任何事情来确保可以自动加载依赖项 - Composer 将完成设置自动加载器的所有工作,因此您不必, 并在添加新的依赖项时使所有内容保持最新。

这是关于 composer.json 架构的完整文档:https://getcomposer.org/doc/04-schema.md .您将希望在项目的根目录中有一个 composer.json 配置文件,以便您可以为您的项目(以及以后需要您的库的任何其他项目)配置 composer。如果您没有,可以使用 composer init 命令以交互方式创建一个。有关该命令的文档可在此处获得:https://getcomposer.org/doc/03-cli.md#init

这是他们的基本使用指南,以防您还没有阅读过:https://getcomposer.org/doc/01-basic-usage.md

关于php - Composer : library which requires a library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44037930/

相关文章:

php - 聊天室在线用户列表实现

php - 使用 AJAX 和 PHP 将 <options> 附加到 <select>

php - 如何发布到具有一对多关系的多个数据库表

PhpStorm 无法识别类中的 PDO 方法

composer-php - 从 Composer 脚本/ Composer API 获取软件包安装路径

php - 使用 Composer 自动加载器进行自定义代码管理?

git - 如何配置私有(private) Bitbucket 存储库以便我可以在 composer.json 中包含私有(private)包?

json - composer的 'package not available in stable-enough version'错误如何解决?

php - 如何将javascript数组传递给php

php - 如何在 HostGator 上使用 PHP Composer