composer 扩展包开发

以开发 Laravel 扩展包为例

参考

  • Laravel 的扩展插件开发指南
  • 如何开发、本地测试、发布 Laravel 扩展包
  • 开发自己的composer包

解释

  • 此处的 '/' 仅代表项目根目录

进入 laravel 项目根目录,创建 packages 文件夹

在项目根目录创建 packages 文件夹, 并将 packages 文件夹添加到 gitignore

进入 packages 文件夹, 创建包目录并进入

cd packages && mkdir alivms && cd alivms

初始化

生成 composer.json 文件

[develop@localhost ali-vms]$ composer init

                                            
  Welcome to the Composer config generator  
                                            


This command will guide you through creating your composer.json config.

Package name (/) [develop/ali-vms]: listen/ali-vms
Description []: ali vms package
Author [zhufengwei , n to skip]: zhufengwei 
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []: 
License []: MIT

Define your dependencies.

Would you like to define your dev dependencies (require-dev) interactively [yes]? no

{
    "name": "listen/ali-vms",
    "description": "ali vms package",
    "license": "MIT",
    "authors": [
        {
            "name": "zhufengwei",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}

Do you confirm generation [yes]? yes

指定依赖(如果需要依赖于其它的包)

编辑 composer.json 指定依赖

......

"require": {
    "php": ">=5.5.9",
    "listen/ali-openapi": "^1.0",
    "guzzlehttp/guzzle": "~6.2.3",
    "monolog/monolog": "*"
},
    
......

在 laravel 项目中临时安装依赖(如果所需依赖还未在项目中安装)

注意:是在 laravel 项目中临时安装!

cd /

composer require "listen/ali-openapi" --dev

创建 .gitignore, 过滤不提交的文件

vim /packages/alivms/.gitignore

/vendor
composer.lock

定义命名空间

vim /packages/alivms/composer.json

"autoload": {
    "psr-4": {
        "Listen\\AliVms\\": "src/"
    }
}

在 /packages/alivms 中的 composer.json 中定义的命名空间,在项目根目录执行 composer dump-autoload 是不会加载到 /vendor/autoload.php 的 [验证此问题可以查看 /vendor/autoload.php, 从此文件进入 /vendor/composer/autoload_psr4.php 进行查看]

临时定义 /composer.json 的命名空间

注意路径

cat /composer.json

{
"autoload-dev": {
        "psr-4": {
            "Listen\\AliVms\\": "packages/alivms/src/"
        }
    },
}    

加载到 /vendor/autoload.php

cd / && composer dump-autoload

在 src 中编写逻辑代码

cd /packages/alivms && mkdir src

src 目录下命令空间都是 Listen\AliVms 开始,以下是示例

1、在 src 目录创建 Alivms Class

namespace Listen\AliVms;

class AliVms 
{
    ......    
}

2、在 src 中 Facades 目录添加 Alivms Class

namespace Listen\AliVms\Facades;

class AliVms extends Facade
{
    public static function getFacadeAccessor()
    {
        return 'alivms';
    }
}

添加 Facade、serviceProvider 后的操作

编辑项目根目录下的 config/app.php,添加 providers 和 aliases

'providers' => [
    ......
    Listen\AliVms\AliVmsServiceProvider::class,
],

'aliases' => [
    ......
    'AliVms' => Listen\AliVms\Facades\AliVms::class,
]

发布配置

php artisan vendor:publish

发布配置后即可正常加载配置,此时可对扩展包进行完整测试了

发布版本

如果扩展包测试没问题,就可以提交代码并发布版本了

在 github 创建空项目并提交代码

git init

git remote add origin https://github.com/listen-rain/ali-vms.git

git pull  origin master

git branch --set-upstream-to=origin/master master

git add .

git commit -m "init"

git push

发布版本

注意 composer.json 中的 version 信息一定要与 tag 保持一致!

修改 composer.json 中的版本信息

"version": "1.0.1"

添加 tag

# git tag -a  -m 
git tag -a 1.0.1 -m '初始版本 1.0.1'

# git push origin 
git push origin 1.0.1

提交到 packagist

参考: 提交 composer 包

1、提交包

submit > check > submit

composer 扩展包开发_第1张图片
image.png

2、添加 webhook

composer 扩展包开发_第2张图片
image.png
  • 其中的 payload url 是 https://packagist.org/api/github?username=<用户名>, 在 webhook 添加参考 中可以找到

  • 其中的 Secret 在你的用户中心


    composer 扩展包开发_第3张图片
    image.png

安装

如果使用国内镜像,需等待同步后再安装

# 更换为国内镜像,此镜像工作日5分钟同步一次,休息日15分钟同步一次
composer config repo.packagist composer https://packagist.laravel-china.org

# 安装
composer require "listen/ali-vms[:^1.0]"

你可能感兴趣的:(composer 扩展包开发)