我正在尝试创建一个包含其他库的PHP库,我打赌我错过了一些基本的东西。
使用AWS PHP SDK作为指南,我想创建一个库,在使用Composer安装后,需要其他库,但需要整个类的范围(都来自当前库,并且需要库)只需使用require 'vendor/autoload.php;'
即可获得。
设置它的基本要求是什么?是以特定方式配置composer.json
,命名空间还是两者兼而有之?
答案 0 :(得分:3)
您所描述的正是Composer的主要目的 - 定义可能需要并实现其他包的代码包。
使用AWS SDK作为指南,如果您查看提供所有Composer配置信息的composer.json文件,您将看到两个需要的块,一个标记为require
,另一个标记为{{ 1}}:
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
部分列出了在开发环境中工作时可能只需要的库,而且在生产环境中不需要这些库。
当您指定其他所需的库时,Composer将安装您的库,然后出去并且还需要您的库所需的库(然后是那些库需要的库,依此类推)。
还包括要包含的库,您会注意到版本号也包含在内,以确保兼容性。
添加新依赖项的最简单方法是在命令行中使用require-dev
命令,在此处记录:https://getcomposer.org/doc/03-cli.md#require。如果您不完全了解该命令,该命令可帮助您搜索所需的软件包,并可自动为您解析最新版本(如果您需要/可以覆盖,可以覆盖)。
如果您希望仅使用开发依赖项,请在运行命令时添加composer require
标志。
使用此命令,Composer将自动更新您的composer.json文件,将依赖关系下拉到本地计算机,并更新您的自动加载器。
除了--dev
之外,您永远不需要做任何事情以确保自动加载依赖关系 - Composer将完成设置自动加载器所需的所有工作,因此您不需要,并将所有内容保持最新状态添加了新的依赖项。
以下是composer.json架构的完整文档:https://getcomposer.org/doc/04-schema.md。您将希望在项目的根目录中具有composer.json配置文件,因此您可以为项目(以及稍后需要您的库的任何其他人)配置composer。如果没有,可以使用require_once vendor/autoload.php
命令以交互方式创建一个。有关该命令的文档,请访问:https://getcomposer.org/doc/03-cli.md#init
这是他们的基本使用指南,如果你还没有完成它:https://getcomposer.org/doc/01-basic-usage.md