Composer 的工作原理
我们在使用 Composer 之前我们得了解一下它的实现原理,它主要由三个部分组成:命令行工具、包仓库、代码库:
Packagist
它是官方仓库,也就是我们平常说的 Composer 源,它的作用是存储这些包的信息,版本,代码来源,依赖,作者,主页等信息。官网是 packagist.org/, 你也可以将自己的包发布在上面,这样 Composer 工具就能搜索与安装你的包了,后面我们会具体介绍发布流程。
Repository
代码仓库,Packagist 支持公开与私有仓库,通常是 GitHub 作为代码仓库,当然也可以是 BitBucket 或者 GitLab。
Vendor directory
我们的 Composer 依赖包都统一安装在项目的 vendor
目录下,其中还有 vendor/composer
目录用于存储依赖包的一些基本信息,比如命名空间等。
Composer创建SDK
初始化Composer
确保在项目目录中初始化Composer。如果你还没有Composer,请先安装它。
composer init
当你运行composer init
命令时,会开始一个交互式过程,系统将询问你有关项目的一些信息。以下是可能会被询问的问题以及应该如何回答:
-
Package name (
vendor-name/package-name
) [默认为当前目录名]:
-
这是你的SDK包的名称。默认情况下,Composer会使用当前目录名,但你可以根据需要更改。
-
Description [默认为None]:
描述你的SDK的简短说明。
-
Author [默认为None]:
输入你的名字和邮箱。
-
Minimum Stability [默认为stable]:
你可以选择包的最低稳定性。大多数情况下,保持默认即可。
-
Package Type [默认为library]:
通常是library
,如果你的项目是一个应用程序,则可能选择project
。
-
License [默认为MIT]:
选择你打算使用的许可证类型。
-
Would you like to define your dependencies (require) interactively? [yes]:
是否要交互式地定义依赖项。选择“yes”会引导你添加依赖项。
-
Search for a package:
在这里,你可以搜索并选择你想要添加的依赖项。例如,你可以搜索"guzzlehttp/guzzle"
以添加 Guzzle HTTP 客户端。
-
Would you like to define your dev dependencies (require-dev) interactively? [yes]:
是否要交互式地定义开发环境下的依赖项。选择“yes”会让你添加开发环境下的依赖项,例如测试框架或代码检查工具。
-
Search for a package (for dev):
类似于第 8 步,在这里你可以搜索并添加开发环境下的依赖项。
完成这些步骤后,Composer 将根据你提供的信息生成一个composer.json
文件,其中包含了你项目的基本信息、依赖项等。这个文件会被用来管理你的项目所需的各种依赖项以及包的配置信息。
定义依赖项
在composer.json
文件中,定义你的SDK的依赖项。这可能包括SDK的名称、版本号和其他信息。
{"name": "your-vendor-name/your-sdk-name","description": "Description of your SDK","require": {"php": "^7.3",// 你的依赖项},"autoload": {"psr-4": {"YourNamespace\\": "src/"}}
}
确保将YourNamespace
替换为你想要的命名空间。
SDK目录结果
├── CHANGELOG.md
├── LICENSE
├── Makefile
├── README.md
├── composer.json
├── composer.lock
├── docs
│ ├── README.md
├── phpunit.xml
├── scripts
│ └── php_lint.sh
├── src
│ └── Support
│ └── helpers.php
└── tests├── AbstractTestCase.php├── Feature├── Unit│ └── ExampleTest.php└── bootstrap.php