yourivw / sailor
用于 Laravel Sail 的扩展,允许用户将额外服务安装到 Sail 安装中。
Requires
- php: ^8.1
- illuminate/support: ^10.0|^11.0
- laravel/sail: ^1.26
- symfony/yaml: ^6.0|^7.0
Requires (Dev)
- orchestra/testbench: ^8.21|^9.0
- phpstan/phpstan: ^1.10
This package is auto-updated.
Last update: 2024-09-09 00:18:28 UTC
README
简介
此包是 Laravel Sail 的扩展,允许用户将额外服务安装到 Sail 安装中。这个想法是,这使您可以创建一个额外的包,该包定义了您的服务,然后可以轻松且快速地将这些服务安装到新项目中。此包还提供选项以覆盖默认使用的 Sail 包,以及 Laravel 服务的命名方式。
我的服务也可用,可以通过安装 yourivw/sailor-services 来使用。
安装
使用 composer 将此包作为开发依赖项安装
composer require yourivw/sailor --dev
定义 Sailor 服务
服务可以通过两种方式定义:流畅地使用 SailorService::create()
,以及通过定义一个新的实现 Serviceable 接口的新类。定义后,使用 Sailor Facade 上的 Sailor::register()
将服务注册到管理器中。或者,SailorService 类有一个注册函数,这样服务就可以流畅地注册。
在两个示例中,都可以使用回调进行进一步设置。例如,通过使用 $compose
参数动态地向 docker-compose 文件添加内容,使用 $command
参数写入输出,在发布时复制额外的文件等。
就像这些示例一样,我建议检查应用是否在控制台运行,以避免在没有应用在控制台运行的情况下无用地注册这些服务。
流畅示例
if ($this->app->runningInConsole()) { SailorService::create('example', __DIR__ . '/../stubs/example.stub') ->useDefault() ->withVolume() ->withPublishable([__DIR__ . '/../example-files' => $this->app->basePath('docker/sailor/example-files')]) ->callAfterAdding(function (Command $command, array &$compose) { $compose['services']['example']['environment']['HELLO'] = 'WORLD'; }) ->callAfterPublishing(function (Command $command) { $command->info('Successfully published example service files.'); }) ->register(); }
接口示例
class ExampleService implements Serviceable { public function name(): string { return 'example'; } public function stubFilePath(): string { return __DIR__.'/../stubs/example.stub'; } // Other interface functions similair to the fluent example. }
if ($this->app->runningInConsole()) { Sailor::register(new ExampleService()); }
其他配置
// Set which Sail services are checked by default. Sailor::setSailDefaultServices(['mysql', 'redis']); // Set the default name for the Laravel service. Sailor::setDefaultServiceName('laravel-example.local');
关于卷的说明
Sailor 会在您的服务定义了需要卷时自动添加卷,这与 Sail 的做法相同。然而,这些卷在 docker-compose 文件中以 'sailor-' 为前缀。务必正确地在存根文件中引用这些卷。卷名称是您的服务名称,加上 sailor- 前缀。请参见示例。
SailorService::create('redisinsight', __DIR__ . '/../stubs/redisinsight.stub') ->withVolume() ->register();
services: redisinsight: image: '...' volumes: - 'sailor-redisinsight:/data' ... volumes: sailor-redisinsight: driver: local
用法
安装命令
安装命令可以像默认的 Sail 安装命令那样使用。此外,将执行检查以确定是否已存在 docker-compose 文件,如果已存在,则将显示错误。要添加服务,请使用 add 命令。还有直接重命名 Laravel 服务的选项。在后台,将运行 Sail 的 install 命令来处理标准服务的安装,而此包将处理自定义服务。有关用法信息,请参阅 sailor:install --help
。
添加命令
添加命令可以像默认的 Sail 添加命令那样使用。此外,将执行检查以确定是否已存在 docker-compose 文件,如果没有,则将显示错误。要创建新的安装,请使用 install 命令。在后台,将运行 Sail 的 add 命令来处理标准服务的安装,而此包将处理自定义服务。有关用法信息,请参阅 sailor:add --help
。
重命名命令
可以使用重命名命令来重命名 Laravel 服务。它将在现有的 Docker 文件中找到该服务并对其进行重命名。在 .env 文件中添加或编辑一行,指定新的服务名称。您的 Laravel 实例现在可以通过此 URL 访达。确保此 URL 指向正确的地址才能正常工作,例如,通过将其添加到您的 Windows hosts 文件中。有关使用方法,请参阅 sailor:rename --help
。
重命名安装将导致 Sail 命令无法再找到 Laravel 安装。建议仅使用 Sailor 命令添加包以防止此情况发生。
发布命令
为了在修改服务时进一步简化工作流程,您的新服务还可以指定在需要时应该发布的内容。例如:Sail 可以为您发布的 PHP 运行时,以便自定义这些内容。这不是必需的,可以完全跳过。运行发布命令时,可以使用 --services
选项选择特定的服务,以限制哪些服务文件被发布。有关使用方法的更多信息,请参阅 sailor:publish --help
。
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG。
贡献
欢迎贡献。请阅读以下有关问题和 PR 的信息。
问题
- 确保问题可以重现。
- 确保问题尚未被提出。
- 尽可能提供关于问题的信息。
拉取请求
- 确保新功能增加了本软件包的功能。
- 确保所有测试通过,如果需要,添加测试。
- 不要提交添加预定义服务的 PR,这些将被关闭。此软件包是 Sail 和自定义服务之间的接口。
- 提交 PR 后,将自动运行测试和格式化操作。
测试
该软件包使用 PHPUnit 测试和 PHPStan 进行静态分析。
vendor/bin/phpunit
vendor/bin/phpstan
或使用 Sail
sail bin phpunit
sail bin phpstan
许可
此软件包是开源软件,根据 MIT 许可证 许可。