Composer不会直接安装phar文件,而是通过bin配置或脚本自动化下载管理;常见误区是认为其能像普通库一样解析phar;可通过composer.json的bin-dir、scripts或插件如bamarni/composer-bin-plugin实现集成。

Composer本身并不会像处理常规PHP依赖那样,直接“安装”一个phar归档包到你的
vendor
要让Composer与phar归档包协同工作,我们主要有几种思路,但核心都不是Composer直接“解压”或“安装”phar。更多的是通过Composer的
bin
作为项目依赖的命令行工具(最常见): 很多PHP工具,比如PHPUnit、php-cs-fixer、PHPStan等,虽然最终可能以phar形式运行,但它们本身是作为Composer包发布的。当你
require
vendor
composer.json
bin
vendor/bin
vendor/bin/phpunit
vendor/bin/php-cs-fixer
{
"require-dev": {
"phpunit/phpunit": "^9.5",
"friendsofphp/php-cs-fixer": "^3.0"
},
"config": {
"bin-dir": "bin" // 可选,将bin目录移到项目根目录
}
}运行
composer install
vendor/bin
bin
通过Composer脚本下载和管理独立的phar工具: 如果一个phar工具没有以Composer包的形式发布,或者你只是想在项目中使用一个特定的phar版本,你可以利用Composer的
scripts
{
"scripts": {
"post-install-cmd": [
"test -f tools/mytool.phar || curl -L https://example.com/mytool.phar -o tools/mytool.phar"
],
"post-update-cmd": [
"test -f tools/mytool.phar || curl -L https://example.com/mytool.phar -o tools/mytool.phar"
],
"run-mytool": "php tools/mytool.phar"
}
}这里,我们在
post-install-cmd
post-update-cmd
mytool.phar
test -f
composer run-mytool
使用Composer插件(较少见但强大): 有一些Composer插件专门用于处理phar文件,例如
bamarni/composer-bin-plugin
composer.json
vendor/bin
总的来说,Composer不会直接“安装”一个phar文件到你的
vendor
bin
我发现很多初学者,包括我自己刚接触时,都容易对Composer如何处理PHAR文件产生一些误解。最常见的一个误区就是,认为Composer能够像安装
monolog/monolog
.phar
vendor
composer.json
vendor
PHAR文件,全称PHP Archive,它是一个将多个PHP文件打包成一个可执行文件的格式,它更像是一个“自包含”的二进制文件,而不是一个需要Composer去解析和管理其内部依赖的源代码库。当你
require
phpunit/phpunit
bin
bin
vendor/bin
所以,如果你有一个独立的
mytool.phar
composer.json
composer.json
"require": {"mytool/mytool": "1.0.0"}利用Composer的项目配置来集成PHAR工具,主要是围绕着
bin
scripts
首先,利用bin
composer.json
bin
// 包的 composer.json
{
"name": "somevendor/my-cli-tool",
"bin": ["bin/my-cli-tool"]
}当你将这个包作为依赖添加到你的项目
composer.json
composer install
vendor/bin
vendor/somevendor/my-cli-tool/bin/my-cli-tool
vendor/bin/my-cli-tool
vendor/bin
composer.json
config.bin-dir
// 项目的 composer.json
{
"require-dev": {
"somevendor/my-cli-tool": "^1.0"
},
"config": {
"bin-dir": "tools" // 这样链接就会创建在项目根目录的 "tools/" 目录下
}
}现在,你就可以通过
tools/my-cli-tool
其次,通过scripts
scripts
post-install-cmd
post-update-cmd
比如,你想在项目安装或更新后,自动下载一个名为
phpmetrics.phar
{
"scripts": {
"post-install-cmd": [
"@php -r \"copy('https://phpmetrics.org/phpmetrics.phar', 'bin/phpmetrics.phar');\""
],
"post-update-cmd": [
"@php -r \"copy('https://phpmetrics.org/phpmetrics.phar', 'bin/phpmetrics.phar');\""
],
"analyze": "php bin/phpmetrics.phar"
}
}这里,我们使用了
@php -r "..."
phpmetrics.phar
bin/
@
analyze
composer analyze
composer.json
当Composer的内置机制不足以满足我们对PHAR工具的复杂管理需求时,Composer插件和自定义脚本就成了我们的得力助手。它们允许我们突破Composer处理常规依赖的范畴,将更灵活、更个性化的PHAR工具集成方案引入到项目中。
Composer插件的作用: Composer插件是扩展Composer核心功能的强大方式。对于PHAR管理而言,一些插件就是为了解决特定痛点而生。例如,
bamarni/composer-bin-plugin
composer.json
vendor/bin
比如,你可能想使用一个PHAR工具,但它没有在Packagist上发布,或者你希望它独立于你的项目依赖,不污染
vendor
composer.json
{
"require": {
"bamarni/composer-bin-plugin": "^1.8"
},
"extra": {
"bin-install": [
{
"name": "php-cs-fixer",
"url": "https://cs.symfony.com/download/php-cs-fixer-v3.phar",
"version": "v3"
},
{
"name": "phpmetrics",
"url": "https://phpmetrics.org/phpmetrics.phar",
"version": "latest"
}
]
}
}安装插件后,运行
composer bin:install
bin-install
vendor/bin
自定义脚本的作用: 对于更简单、更直接的需求,或者当你不想引入额外插件依赖时,Composer的自定义脚本功能是管理PHAR工具的瑞士军刀。我们可以在
composer.json
scripts
composer run-script <script-name>
例如,如果你需要一个特定的PHAR工具,但它的下载URL可能会变化,或者你需要做一些下载前的校验、下载后的权限设置等操作,自定义脚本就能派上用场。
{
"scripts": {
"download-my-custom-tool": [
"echo 'Downloading custom tool...'",
"curl -sSL -o bin/my-custom-tool.phar https://my-custom-tool.com/latest/tool.phar",
"chmod +x bin/my-custom-tool.phar",
"echo 'Custom tool downloaded and made executable.'"
],
"post-install-cmd": [
"@download-my-custom-tool" // 在安装后自动下载
],
"run-tool": "php bin/my-custom-tool.phar --version"
}
}在这个例子中,我们定义了一个
download-my-custom-tool
post-install-cmd
run-tool
无论是选择插件还是自定义脚本,它们都为Composer在PHAR工具管理上提供了强大的扩展能力,让我们的开发工作流更加顺畅和自动化。选择哪种方式,通常取决于项目的具体需求、团队对新依赖的接受程度以及所需功能的复杂性。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号