macfja / composer-phar-bin
Composer 插件,用 Phar 替换开发依赖
Requires
- php: ^7.1
- composer-plugin-api: ^1.0
- ext-simplexml: *
- symfony/process: >= 3
- webmozart/path-util: ^2.1
Requires (Dev)
- composer/composer: ^1.10
- ergebnis/composer-normalize: *
- friendsofphp/php-cs-fixer: ^2.16
- jakub-onderka/php-parallel-lint: ^1.0
- pdepend/pdepend: ^2.5.0
- phan/phan: ^1.1.10 || ^2
- phploc/phploc: >= 2
- phpmd/phpmd: ^2.2.3
- phpstan/phpstan: ^0.10
- rskuipers/php-assumptions: ^0.8.0
- sebastian/phpcpd: ^5.0.1
- theseer/phpdox: ^0.12.0
- vimeo/psalm: ^3.9
This package is auto-updated.
Last update: 2024-08-29 05:18:55 UTC
README
该插件将开发依赖替换为其 Phar。
为什么?
我多次遇到开发工具(代码质量、文档生成等)的依赖锁定,而大多数工具都有 Phar 二进制文件。
为了管理这些 Phar,已经存在解决方案,如 Phive,但它是一个需要安装的另一个工具,需要运行另一组命令。
因此,我创建了这个 Composer 插件,以尽可能不明显的方式将 Phive 集成到 Composer 中。
它是如何工作的?
当运行 composer install
、composer update
或 composer require
时,插件将检查您的 require-dev
包是否存在于 Phive 仓库中。如果找到,则 Phive 将链接您的 composer 二进制文件中的 Phar,以便脚本能继续运行,并且依赖将被忽略(及其子依赖)。
安装
只需运行: composer require macfja/composer-phar-bin
,然后进行 composer install
。
或全局: composer global require macfja/composer-phar-bin
。
任何后续的 composer install
、composer update
或 composer require
都将触发依赖替换。
如何阻止一个包被替换?
如果出于某种原因需要由 Phive 知道的包不被替换为其 Phar,您可以在您的(根) composer.json
中添加一个不替换的包列表。
在 extra
部分,添加包含名为 exclude
的数组的对象 composer-phar-bin
,该数组包含 Composer 包。
示例
在下面的示例中,phpunit/phpunit
将由 Composer 下载和管理,但 phan/phan
将被替换为其 Phar。
{ "name": "macfja/composer-phar-bin-test", "require-dev": { "macfja/composer-phar-bin": "^1.0.0", "phpunit/phpunit": "^9.1", "phan/phan": "^2.7" }, "extra": { "composer-phar-bin": { "exclude": ["phpunit/phpunit"] } } }
局限性
该插件仅在使用后工作。这看起来很明显,但有些情况因为这一点而难以理解。
新环境中依赖冲突
让我们假设您使用该插件并且您有 虚拟的 一些冲突。一切正常,该插件用 Phar 替换了冲突库。
有人想安装该项目,但 Composer 抱怨某些包(“您的需求无法解析为可安装的包集。”)。
原因可能是您没有提交您的 composer.lock
文件,因此 Composer 正在尝试解决所有依赖项,由于我们的插件尚未安装和加载,它无法施展其魔法。
如何解决这个问题?
您有几个解决方案可以解决这个问题
- 您可以提交您的
composer.lock
文件 - 您可以逐步生成它:移除所有开发依赖项,然后安装您的项目(
composer install
),现在重新添加所有您的开发依赖项 - 您可以在全局范围内安装插件(这样它将始终被加载)
全新安装中缺少 phars
您下载了一个带有 composer.lock
的项目,运行 composer install
。
一切看起来都正常,但当您第一次运行 composer 脚本时,Composer 抱怨缺少文件。
这里的问题在于 Composer 读取了 composer.lock
文件,因此只安装了您的依赖项,排除了那些由我们的插件管理的依赖项。但是,由于插件尚未加载(因为尚未安装),它不会安装 Phar。
如何解决这个问题?
您有两个选项
- 简单地重新运行
composer install
- 全局安装插件(这样它总是会被加载)
贡献
您可以为库做出贡献。为此,您可以在 Github 上创建问题来
- 提出您的问题
- 请求任何更改(错别字、糟糕的代码等)
- 等等...
您还可以通过 PR 来
- 建议更正
- 等等...
本地安装
首先克隆项目(无论是这个仓库,还是您的分支),然后运行
make install # Install project vendor make all # Run QA tools + generate docs
验证您的代码
当您完成代码编写后,运行以下命令检查代码质量是否符合定义的规则,并对它进行格式化
make analyze # Run QA tools
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件