composer的基础使用
1. 创建项目
1. 初始化配置步骤
运行 composer init 后,按以下步骤配置:
1. 包名 (Package name)
Package name (<vendor>/<name>) [pc/design-patterns-php]: shenlink/design-pattern
这里填写的是 shenlink/design-pattern
2. 项目描述 (Description)
Description []: PHP implementation of design patterns.
3. 作者信息 (Author)
# 这里 composer 会提示是否使用默认 git 的作者信息,直接回车或填写作者信息
Author [shenlink <2024133718@qq.com>, n to skip]:
4. 最小稳定性 (Minimum Stability)
Minimum Stability []: stable
5. 项目类型 (Package Type)
Package Type (e.g. library, project, metapackage, composer-plugin) []: project
6. 开源协议 (License)
License []: MIT
7. 依赖管理 (Dependencies)
# 直接回车跳过(设计模式项目通常不需要额外依赖)
Would you like to define your dependencies (require) interactively [yes]? n
# 直接回车跳过,稍后手动安装测试框架
Would you like to define your dev dependencies (require-dev) interactively [yes]? n
8. 自动加载配置
# 直接回车,使用默认的 PSR-4 配置,也可以自己手动配置
Add PSR-4 autoload mapping? Maps namespace "Shenlink\DesignPattern" to the entered relative path. [src/, n to skip]:
9. 确认
这时候显示的配置信息,请确认是否正确,如果正确请输入 yes 继续,否则请输入 n 退出。
{
"name": "shenlink/design-pattern",
"description": "PHP implementation of design patterns.",
"type": "project",
"license": "MIT",
"autoload": {
"psr-4": {
"Shenlink\\DesignPattern\\": "src/"
}
},
"authors": [
{
"name": "shenlink",
"email": "2024133718@qq.com"
}
],
"minimum-stability": "stable",
"require": {}
}
# 输入 yes ,确认配置信息
Do you confirm generation [yes]? yes
2. 关键调整
1. 安装测试框架
安装 PHPUnit ,作为项目的测试框架
composer require --dev phpunit/phpunit
2. 修改 composer.json 文件
- 新增 autoload-dev 配置
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
}
这样之后,在根目录创建
tests
目录,该目录的命名空间就是\Tests
了
- 新增 composer 运行命令
"scripts": {
"test": [
"php shenlink test"
]
}
这样之后,在根目录创建
shenlink
文件,并写入以下内容:
<?php
declare(strict_types=1);
class Shenlink
{
private array $commands = [];
private const VERSION = "1.0.0";
public function __construct()
{
$this->registerCommand('-h', [$this, 'handleHelpCommand']);
$this->registerCommand('--help', [$this, 'handleHelpCommand']);
$this->registerCommand('test', [$this, 'handleTestCommand']);
}
public function registerCommand($name, $handler): void
{
$this->commands[$name] = $handler;
}
public function run(array $argv): void
{
if (count($argv) < 2) {
$this->handleHelpCommand();
return;
}
$command = $argv[1];
if (!isset($this->commands[$command])) {
echo "命令未找到: $command\n";
$this->handleHelpCommand();
return;
}
call_user_func($this->commands[$command]);
}
private function handleHelpCommand(): void
{
$this->showHelpInfo();
}
private function handleTestCommand(): void
{
echo "running tests...\n";
// 调用 PHPUnit 执行测试
$phpunitCommand = __DIR__ . '/vendor/bin/phpunit';
$output = shell_exec($phpunitCommand);
if ($output === null) {
echo "错误: 无法执行 PHPUnit。请确保已正确安装 PHPUnit ,并配置好 phpunit.xml 。\n";
echo "使用的命令: $phpunitCommand\n";
} else {
echo $output;
}
}
private function showHelpInfo(): void
{
echo "可用命令:\n";
echo " -h, --help - 显示帮助信息\n";
echo " test - 运行测试\n";
}
}
$shenlink = new Shenlink();
$shenlink->run($argv);
执行
php shenlink test
命令或composer test
命令, 运行测试
- 明确
php
版本依赖
"require": {
"php": "^7.4"
},
3. 完整的 composer.json 文件
{
"name": "shenlink/design-pattern",
"description": "PHP implementation of design patterns.",
"authors": [
{
"name": "shenlink",
"email": "2024133718@qq.com"
}
],
"type": "project",
"license": "MIT",
"require": {
"php": "^7.4"
},
"require-dev": {
"phpunit/phpunit": "^9.6"
},
"autoload": {
"psr-4": {
"Shenlink\\DesignPattern\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"test": [
"php shenlink test"
]
},
"minimum-stability": "stable"
}
3. 目录结构
design-patterns-php/
├── src/
├── tests/
├── vendor/
│ └── ...
├── shenlink
├── composer.json
└── composer.lock
2. 安装项目
安装 laravel
框架
- 安装命令:
composer create-project --prefer-dist laravel/laravel my-laravel-app
- 可以指定版本号:
composer create-project --prefer-dist laravel/laravel my-laravel-app "8.*"
安装 8.*
版本的 laravel
框架
安装 ThinkPHP
框架
- 安装命令:
composer create-project topthink/think my-thinkphp-app
- 可以指定版本号:
composer create-project topthink/think my-thinkphp-app "6.*"
安装 6.*
版本的 ThinkPHP
框架
3. 常用命令
Composer 是 PHP 的一个依赖管理工具,常用于管理项目的库和依赖项。以下是一些常见的 Composer 命令:
composer init
用于初始化一个新的 Composer 项目,生成composer.json
文件。composer install
如果 composer.lock 文件存在,Composer 会从该文件读取依赖版本并安装到 vendor 目录下。如果 composer.lock 文件不存在,Composer 会从 composer.json 文件读取依赖版本并安装。通常用于部署时安装依赖。composer update
更新项目中的依赖包到符合composer.json
文件中约定的版本。composer require <package>
安装指定的依赖包并将其添加到composer.json
文件中。composer remove <package>
移除指定的依赖包,并更新composer.json
和composer.lock
文件。composer dump-autoload
重新生成自动加载文件,用于更新类映射。composer create-project <package> <dir>
创建一个新的项目,并安装指定包的最新版本。composer update <package>
更新指定的包到最新版本。composer self-update
更新 Composer 本身到最新版本。composer install --no-dev
安装依赖时不包含开发依赖项。composer install --prefer-dist
使用.tar
或.zip
包安装,而不是从 Git 或 SVN 下载。composer require <package> --dev
安装并将包添加到开发依赖项中。composer global require <package>
安装全局依赖包。
4. 版本号前的符号的含义
在 Composer 中,版本号前的符号(如 ~、^、*)用于定义依赖包的版本范围。它们有不同的含义,主要帮助 Composer 确定可以安装哪些版本。下面是这些符号的详细解释:
1. ~
符号
~
表示版本号只能改变末尾,如果是~x.y
末尾就是 y
,如果是 ~x.y.z
,末尾就是 z
~1.2.3
:表示1.2.x
<= 版本 <1.3.0
。~1.2
:表示1.2.x
<= 版本 <2.0.0
。~1.0
:表示1.x.x
<= 版本 <2.0.0
。
2. ^
符号
^
表示除了大版本号以外,小版本号和补丁版本号都可以变
^1.2.3
:表示1.2.3
<= 版本 <2.0.0
^1.2
:表示1.2.0
<= 版本 <2.0.0
注意:0开头的版本号特殊对待,因为在
0.x.x
范围内,版本号的修改可能是破坏性的。^0.3.0
表示0.3.0
<= 版本号 <0.4.0
,注意:不是 <1.0.0
3. *
符号
*
符号用于表示 "任何版本",不管是主要、次要还是补丁版本。
1.2.*
: 表示1.2.0
<= 版本 <1.3.0
1.*
: 表示1.0.0
<= 版本 <2.0.0
*
:表示0.0.0
<= 版本 <∞
4. =
符号
=
符号用于指定一个确切的版本,意味着只安装该版本,不能升级或降级。
=1.2.3
: 表示1.2.3
版本
5. 其它版本范围符号
>
,>=
,<
,<=
,分别代表"大于"、"大于等于"、"小于"和"小于等于"版本号。 比如:>1.2.3
: 表示1.2.3
< 版本 <∞
6. 版本范围符号组合
版本范围符号组合,主要是 |
符号,用于表示 或操作
,只要符合一个版本即可,并操作
使用空格实现
1.2.3|1.2.4
: 匹配1.2.3
或者1.2.4
>=1.2.3 <2.0.0
: 表示1.2.3
< 版本 <2.0.0
>=1.2.3 <2.0.0 | >=2.1.0 <3.0.0
: 表示1.2.3
< 版本 <2.0.0
或者2.1.0
<= 版本 <3.0.0
,满足其中一个就可以了