使用本地 Composer 依赖项开发 Laravel 包
发布日期 作者 Paul Redmond
通过本地文件符号链接在本地开发 Composer 包,当您要创建 Laravel 包并在真实应用程序中试用时,可以极大地提高开发速度。我正在阅读 Caleb Porzio 撰写的关于 花哨的 bash 别名 的文章,该别名灵感来自 npm link
。
我一直致力于改进我的本地工作流程,将 Laravel 包从开发阶段过渡到发布阶段,我经常发现自己通过 GitHub 仓库安装依赖项,然后一遍又一遍地运行 composer update
,因为我比较懒惰。
我想记录一下我的工作流程,用于开发新的和现有的 Laravel 包并在真实的 Laravel 应用程序中运行它们,所有操作都在本地进行。
包设置
我将带您一步一步地创建一个从头开始的快速 Composer 包,并添加一个服务提供者。我知道一些包开发人员使用样板库作为 PHP 和 Laravel 包的起点(查看 Spatie 的 PHP 样板 以获得灵感)。
首先,让我们创建一个示例 composer 项目,并连接一个 Laravel 服务提供者。我喜欢从 ~/code
开始我的代码,因此请更新到您使用的任何位置
cd ~/codemkdir example-pkgcd example-pkg/mkdir src/composer init# Walk through the prompts to init...
生成 composer.json
文件后,让我们添加一些内容,用于自动加载和自动服务提供者
{ "name": "paul/example-package", "authors": [ { "name": "Paul Redmond", "email": "[email protected]" } ], "autoload": { "psr-4": { "ExamplePackage\\": "src/" } }, "require": {}, "extra": { "laravel": { "providers": [ "ExamplePackage\\ExamplePackageServiceProvider" ] } }}
最后,让我们创建一个基本的服务提供者
<?php namespace ExamplePackage; use Illuminate\Support\ServiceProvider; class ExamplePackageServiceProvider extends ServiceProvider{ public function boot() { # code... } public function register() { # code... }}
将您的包链接到 Laravel 项目
现在我们已经拥有了一个可以用于开始开发新的 Laravel 包的本地 composer 项目,让我们创建一个演示 Laravel 应用程序,使用本地文件路径将我们的示例包链接起来
cd ~/codelaravel new laravel-democd laravel-demo
我建议您查看 Caleb Portzio 的 bash 别名,但以下是要链接本地存储库所需的静态命令
composer config repositories.local '{"type": "path", "url": "../example-pkg"}' --file composer.json
接下来,我们需要运行 composer require
,将本地存储库添加为依赖项。请记住使用您在 example-package
composer 文件中定义的 "name"
键
composer require paul/example-package Using version dev-master for paul/example-package./composer.json has been updatedLoading composer repositories with package informationUpdating dependencies (including require-dev)Nothing to install or updateGenerating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump> @php artisan package:discoverDiscovered Package: fideloper/proxyDiscovered Package: laravel/tinkerDiscovered Package: nunomaduro/collisionDiscovered Package: paul/example-packagePackage manifest generated successfully.
您可以看到,我们的包是通过 composer.json
文件中的 "extra"
键发现的,太棒了!
如果您检查文件系统,您会注意到该包是符号链接的,这意味着您可以继续在本地开发该包,并立即在演示项目中试用它
cd ~/code/laravel-demols -la vendor/paultotal 0...example-package -> ../../../example-pkg
现在,您拥有了一种极好的方法,可以在本地开发 Laravel 包,同时与 Laravel 应用程序并存!感谢 Caleb 提供了 很棒的别名!