Composer:需要一个库的库

Chr*_*ott 3 php composer-php

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

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

设置这个的基本要求是什么?是以composer.json特定方式配置、命名空间还是两者的问题?

str*_*dge 5

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

使用 AWS 开发工具包作为指南,如果您查看提供所有 Composer 配置信息的composer.json 文件,您将看到两个 require 块,一个被标记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"
},
Run Code Online (Sandbox Code Playgroud)

这就是您定义您的库所依赖的其他包/库的方式。该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