soy-php / soy
专注于简洁语法和灵活实现的PHP任务运行器
Requires
- league/climate: ^3.0
- php-di/php-di: ^5.0
This package is not auto-updated.
Last update: 2024-09-14 18:20:32 UTC
README
介绍
Soy是一款专注于简洁语法和允许灵活实现的PHP任务运行器。
有关更多信息,请参阅为什么选择Soy?部分。
任务
用法
使用composer将Soy包含到您的项目中
$ composer require soy-php/soy
使用composer包含所需的任务,Soy不包含任何默认任务。对于此示例,我们可以包含Gulp任务
$ composer require soy-php/gulp-task
然后在您的项目目录中创建一个recipe.php
文件,并将您的任务放在那里。这是一个最简单的示例
<?php $recipe = new \Soy\Recipe(); $recipe->component('default', function (\Soy\Gulp\RunTask $gulpTask) { $gulpTask->run(); }); return $recipe;
这是一个更高级的示例,使用自定义CLI参数等
<?php $recipe = new \Soy\Recipe(); $recipe->cli(function (\League\CLImate\CLImate $climate) { $climate->arguments->add('verbose', [ 'prefix' => 'v', 'longPrefix' => 'verbose', 'description' => 'Verbose output', 'noValue' => true, ]); }); $recipe->prepare(\Soy\Gulp\RunTask::class, function (\Soy\Gulp\RunTask $gulpTask) { return $gulpTask->setBinary('/usr/local/bin/gulp'); }); $recipe->component('gulp', function (\Soy\Gulp\RunTask $gulpTask, \League\CLImate\CLImate $climate) { $verbose = $climate->arguments->defined('verbose'); if ($verbose) { $climate->green('Running gulp'); } $gulpTask ->setVerbose($verbose) ->run(); }); $recipe->component('default', null, ['gulp']); return $recipe;
API
Soy的核心是Recipe,它有两个主要方法:prepare
和component
。
准备
准备可以用来为任何任务设置默认值,第一个参数是类名,第二个参数是一个闭包,它接受一个类实例作为第一个参数。请确保您始终返回对象。
$recipe->prepare(\Soy\Task\GulpTask::class, function (\Soy\Task\GulpTask $gulpTask) { return $gulpTask->setBinary('/usr/local/bin/gulp'); });
您可以有任意多的prepare
方法,甚至为同一类。您还可以传递第三个参数来预置准备,而不是附加。
组件
组件可以用来执行您的任务,第一个参数是组件的名称,第二个参数是一个闭包(或null)用于执行,第三个参数是其他组件的依赖数组。
$recipe->component('gulp', function (\Soy\Task\GulpTask $gulpTask, \League\CLImate\CLImate $climate) { $verbose = $climate->arguments->defined('verbose'); if ($verbose) { $climate->green('Running gulp'); } $gulpTask ->setVerbose($verbose) ->run(); });
您可以在闭包的签名中放入任何内容,相应的对象将根据类型提示注入。
CLI
定义CLI命令有三种方式,每种方式适用于不同的情况。
如果您想引入全局参数
$recipe->cli(function (\League\CLImate\CLImate $climate) { $climate->arguments->add([ 'foo' => [ 'description' => 'foo', 'longPrefix' => 'foo', 'noValue' => true, ], ]); });
如果您想将特定任务的参数添加到组件中
$fooComponent = $recipe->component('foo', function (\Soy\Task\FooTask $fooTask, \Soy\Task\BarTask $barTask) { $fooTask->run(); $barTask->run(); }); $fooComponent->cli([\Soy\Task\FooTask::class, 'prepareCli']); $fooComponent->cli([\Soy\Task\BarTask::class, 'prepareCli']);
您还可以使用流畅接口
$recipe->component('foo', function (\Soy\Task\FooTask $fooTask, \Soy\Task\BarTask $barTask) { $fooTask->run(); $barTask->run(); }) ->cli([\Soy\Task\FooTask::class, 'prepareCli']) ->cli([\Soy\Task\BarTask::class, 'prepareCli']) ;
如果您想添加您自己的组件特定参数
$fooComponent = $recipe->component('foo', function (\Soy\Task\FooTask $fooTask) { $fooTask->run(); }); $fooComponent->cli(function (\League\CLImate\CLImate $climate) { $climate->arguments->add([ 'foo' => [ 'description' => 'foo', 'longPrefix' => 'foo', 'noValue' => true, ], ]); });
为什么选择Soy?
Soy的重点是让开发人员重新获得控制权。
PHP
Soy的配方是用纯PHP编写的,您不需要熟悉任何新的语言,我们也不会强迫您使用标记语言。这个决定的成果是,您不再受限于您能做什么。
任务
Soy的任务大多是CLI包装器,每个任务至少有一个不接收任何参数的run()
方法。这意味着任务专注于做一件事,所有选项都通过setter传递。因为任务是CLI包装器,所以不存在奇怪的集成错误的风险,调试变得容易。
可重用性
我们在开发代码时都追求可重用性,Soy有两种方式来加强这种思维模式。
支持这一点的第一个支柱是准备任务的概念。任务准备是堆叠的,可以是附加或预置。这些准备将在Soy的引导阶段运行,让您能够操作任何任务。您可以准备的一个有趣的对象是CLImate,准备CLImate允许您添加必需的/可选的参数/标志,让您完全控制如何与您的任务运行器交互。
支持可重用性的第二个支柱是通过 run()
方法参数选择设置器,每个任务都通过设置器接受其选项,允许你在任务准备阶段设置默认值。你可以创建一个具有合理默认值的配方,在你的项目配方中要求它,并且只自定义一些像文件路径之类的东西。
输出
豆子不喜欢说话,它把说话的权力留给你。你可以在CLI任务上启用详细模式,以获取更多关于使用的命令行和命令输出的洞察,但当组件被执行时没有默认输出。你可以在你的组件中添加 CLImate 作为参数,并使用其惊人的输出函数来满足你的需求。