在 Laravel 生态系统中使用包的乐趣之一是它们的安装非常容易。可以使用 Composer 拉入包,Laravel 会自动发现它们。
在这篇文章中,您将学习如何轻松添加install命令,使包用户更容易开始使用包。
常用包命令
php artisan vendor:publish --tag=awesome-package-config
php artisan vendor:publish --tag=awesome-package-migrations
php artisan vendor:publish --tag=awesome-package-assets
有些包会做得更好一点。例如,Laravel Horizon 有一个漂亮的安装命令,它将:
- 发布配置文件
- 在您的应用程序中创建 Horizon 服务提供商
- 在您的 config/app.php 中注册该服务提供商
快速创建包命令
class BackupServiceProvider extends ServiceProvider
{
public function boot()
{
$this->publishes([
__DIR__.'/../config/backup.php' => config_path('backup.php'),
], 'config');
$this->publishes([
__DIR__.'/../resources/lang' => "{$this->app['path.lang']}/vendor/backup",
]);
$this->loadTranslationsFrom(__DIR__.'/../resources/lang/', 'backup');
}
public function register()
{
$this->mergeConfigFrom(__DIR__.'/../config/backup.php', 'backup');
$this->app->bind('command.backup:run', BackupCommand::class);
$this->app->bind('command.backup:clean', CleanupCommand::class);
$this->app->bind('command.backup:list', ListCommand::class);
$this->app->bind('command.backup:monitor', MonitorCommand::class);
$this->commands([
'command.backup:run',
'command.backup:clean',
'command.backup:list',
'command.backup:monitor',
]);
}
在最新版本的 laravel-package-tools 中,我们添加了新功能来为你的包添加安装程序。这就是你可以做到的方式。
class YourServiceProvider extends PackageServiceProvider
{
public function configurePackage(Package $package): void
{
$package
->name('your-package')
->hasConfigFile()
->hasTranslations()
->hasCommands([
BackupCommand::class,
CleanupCommand::class,
ListCommand::class,
MonitorCommand::class,
])
->hasInstallCommand(function(InstallCommand $command) {
$command
->publishConfigFile()
->publishMigrations()
->askToRunMigrations()
->copyAndRegisterServiceProviderInApp()
->askToStarRepoOnGitHub();
});
}
}
使用此代码,您的软件包将获得一个安装命令,该命令将:
- 复制配置文件
- 发布你的包的迁移
- 要求运行迁移
- 将服务提供者存根复制到安装包的应用程序中。该服务提供者也将在config/app.php应用程序中注册
- 询问是否应在 GitHub 上为 repo 加星标
- 使用hasInstallCommand比手动编写安装命令要快得多。





网友评论