利用 Composer 的本地加载功能来优化你的扩展包开发工作流
34

file

如果你想让你创建的 Laravel 包能在真正的应用程序中试用,可以试着通过本地文件符号链接在本地开发的 Composer 包,这能极大地加速你的开发工作。推荐阅读 Caleb Porzio 的 花式 bash 别名,这是一个受 npm link 启发的 bash 别名。

我一直在努力改进我的本地工作流程,以便将 Laravel 软件包从开发中释放出来。我经常发现自己会通过 GitHub repo 安装依赖项,然后一遍又一遍地运行 composer update。因为懒,所以我更新了一些东西。

我会记录我的工作流程,以开发新的和现有的 Laravel 软件包,并在真正的 Laravel 应用程序中运行全部在本地的它们。

软件包设置

我将引导你从头开始创建一个快速 Composer 包并添加一个服务提供器。 我知道一些软件包开发人员使用样板库作为 PHP 和 Laravel 软件包的起点(请参阅 Spatie 的 PHP Skeleton 来获取灵感)。

首先,让我们创建一个 Composer 项目示例并与 Laravel 服务提供器挂钩。 本文内容都在我的 ~/code 目录下:

cd ~/code
mkdir example-pkg
cd example-pkg/
mkdir src/
composer init
# Walk through the prompts to init...

在生成 composer.json 文件后,再为自动加载和自动注册服务提供器添加一些内容:

{
    "name": "paul/example-package",
    "authors": [
        {
            "name": "Paul Redmond",
            "email": "paul@example.com"
        }
    ],
    "autoload": {
        "psr-4": {
            "ExamplePackage\\": "src/"
        }
    },
    "require": {},
    "extra": {
        "laravel": {
            "providers": [
                "ExamplePackage\\ExamplePackageServiceProvider"
            ]
        }
    }
}

最后,让我们来创建一个 skeleton 服务提供器:

<?php

namespace ExamplePackage;

use Illuminate\Support\ServiceProvider;

class ExamplePackageServiceProvider extends ServiceProvider
{
    public function boot()
    {
        # code...
    }

    public function register()
    {
        # code...
    }
}

将软件包链接到 Laravel 项目

既然我们有一个本地的 composer 项目,我们可以使用它开始开发一个新的 Laravel 软件包。创建一个演示用的 Laravel 应用程序,使用本地文件路径链接我们的示例包:

cd ~/code
laravel new laravel-demo
cd 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 updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> [@php](https://laravel-china.org/users/10050) artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nunomaduro/collision
Discovered Package: paul/example-package
Package manifest generated successfully.

你可以看到我们的软件包是通过 composer.json 文件中的 "extra" 键发现的。

如果你检查文件系统,你会注意到该软件包是符号链接的,这意味着你可以继续在本地软件包上开发并立即在演示项目中进行试用:

cd ~/code/laravel-demo
ls -la vendor/paul
total 0
.
..
example-package -> ../../../example-pkg

现在你可以在本地 Laravel 应用程序中开发 Laravel 软件包了!这多亏了 Caleb 神奇的别名!!!


Practice makes perfect.

原文地址:https://laravel-news.com/developing-lara...

译文地址:https://laravel-china.org/topics/11029/u...

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

这样就简单多了,请问封面图,用什么做的? :blush:

4个月前

请问一下 第一张图片的是什么字体

4个月前
oyghan

@WINJAYZWJ Operator Mono 字体

3个月前

@oyghan 多谢

3个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!