aklump / phpswap
0.0.8
2024-08-15 16:31 UTC
Requires
- php: >=5.5
- symfony/console: ^3.4 | ^4.4 | ^5.4
Requires (Dev)
- phpunit/phpunit: ^9.5
README
摘要
提供了一种简单执行非默认PHP版本代码的方法。最初是为了在多个PHP版本下运行Composer项目的PhpUnit测试而构建的。以下是一个示例。
快速开始
这个简单的代码示例应该能让你了解它是如何工作的。
mkdir foo cd foo composer init composer require aklump/phpswap php -v ./vendor/bin/phpswap use 5.6 "php -v; echo" ./vendor/bin/phpswap use 8.1 "php -v; echo"
它做什么
- 临时修改
$PATH
以使用不同的PHP版本二进制文件。 - 如果存在composer.json,则运行
composer update
,以便安装适合交换PHP版本的依赖项。 - 运行给定的可执行文件,可以是命令或脚本路径。
- 最后,如果需要,使用原始PHP运行
composer update
以恢复Composer依赖项。
支持哪些PHP版本?
要查看可用的版本,可以使用show
命令,这些版本将由MAMP提供。
./vendor/bin/phpswap show
依赖项
入门指南
- 确保已安装MAMP。
- 使用MAMP下载你希望交换的所有PHP版本。
- 在你的项目中执行
composer require aklump/phpswap
。 - 使用
vendor/bin/phpswap show
查看可用的版本。 - 使用
./phpswap list
查看所有可用的命令。
使用PhpUnit的示例
以下是一个可以用于在PHP 7.1、7.4和8.1下运行PhpUnit的模式。
- 假设你在项目中使用Composer安装了phpunit
- 然后你使用
./vendor/bin/phpunit -c phpunit.xml
运行你的测试 - 那么你可以按照以下方式实现PhpSwap
- 请参阅下面的控制器文件示例。
./vendor/bin/phpswap use 7.1 './vendor/bin/phpunit -c phpunit.xml' ./vendor/bin/phpswap use 7.4 './vendor/bin/phpunit -c phpunit.xml' ./vendor/bin/phpswap use 8.1 './vendor/bin/phpunit -c phpunit.xml'
命令行选项
-v
在详细模式中,您将看到Composer的输出。
--working-dir
这将设置脚本调用的工作目录。这是可选的。
故障排除
在执行过程中,会在您的项目中临时创建一个名为composer.lock.phpswap的文件。该文件包含在交换之前项目中的composer.lock文件的副本。此文件用于在交换结束时刷新composer.lock。在某些错误情况下,此文件可能不会删除。使用下面的片段进行恢复。
您还可能在交换执行后看到“Composer检测到您的平台中的问题:”。这里同样适用,尝试下面的片段。
mv composer.lock.phpswap composer.lock;composer update
控制器文件示例
以下是一个用于控制测试的完整片段。保存为bin/run_unit_tests.sh并按如下方式调用:bin/run_unit_tests.sh -v
。除非在故障排除时,否则可以省略详细信息的-v
标志。
#!/usr/bin/env bash s="${BASH_SOURCE[0]}";[[ "$s" ]] || s="${(%):-%N}";while [ -h "$s" ];do d="$(cd -P "$(dirname "$s")" && pwd)";s="$(readlink "$s")";[[ $s != /* ]] && s="$d/$s";done;__DIR__=$(cd -P "$(dirname "$s")" && pwd) cd "$__DIR__/.." verbose='' if [[ "${*}" == *'-v'* ]]; then verbose='-v' fi ./vendor/bin/phpswap use 7.3 $verbose './vendor/bin/phpunit -c tests_unit/phpunit.xml' ./vendor/bin/phpswap use 7.4 $verbose './vendor/bin/phpunit -c tests_unit/phpunit.xml' ./vendor/bin/phpswap use 8.0 $verbose './vendor/bin/phpunit -c tests_unit/phpunit.xml' ./vendor/bin/phpswap use 8.1 $verbose './vendor/bin/phpunit -c tests_unit/phpunit.xml' ./vendor/bin/phpswap use 8.2 $verbose './vendor/bin/phpunit -c tests_unit/phpunit.xml'