composer 擴(kuò)展包開發(fā)

以開發(fā) Laravel 擴(kuò)展包為例

參考

解釋

  • 此處的 '/' 僅代表項(xiàng)目根目錄

進(jìn)入 laravel 項(xiàng)目根目錄,創(chuàng)建 packages 文件夾

在項(xiàng)目根目錄創(chuàng)建 packages 文件夾, 并將 packages 文件夾添加到 gitignore

進(jìn)入 packages 文件夾, 創(chuàng)建包目錄并進(jìn)入

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 (<vendor>/<name>) [develop/ali-vms]: listen/ali-vms
Description []: ali vms package
Author [zhufengwei <zhufengwei@100tal.com>, n to skip]: zhufengwei <zhufengwei@aliyun.com>
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": "zhufengwei@aliyun.com"
        }
    ],
    "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 項(xiàng)目中臨時(shí)安裝依賴(如果所需依賴還未在項(xiàng)目中安裝)

注意:是在 laravel 項(xiàng)目中臨時(shí)安裝!

cd /

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

創(chuàng)建 .gitignore, 過(guò)濾不提交的文件

vim /packages/alivms/.gitignore

/vendor
composer.lock

定義命名空間

vim /packages/alivms/composer.json

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

在 /packages/alivms 中的 composer.json 中定義的命名空間,在項(xiàng)目根目錄執(zhí)行 composer dump-autoload 是不會(huì)加載到 /vendor/autoload.php 的 [驗(yàn)證此問(wèn)題可以查看 /vendor/autoload.php, 從此文件進(jìn)入 /vendor/composer/autoload_psr4.php 進(jìn)行查看]

臨時(shí)定義 /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 目錄創(chuàng)建 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 后的操作

編輯項(xiàng)目根目錄下的 config/app.php,添加 providers 和 aliases

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

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

發(fā)布配置

php artisan vendor:publish

發(fā)布配置后即可正常加載配置,此時(shí)可對(duì)擴(kuò)展包進(jìn)行完整測(cè)試了

發(fā)布版本

如果擴(kuò)展包測(cè)試沒問(wèn)題,就可以提交代碼并發(fā)布版本了

在 github 創(chuàng)建空項(xiàng)目并提交代碼

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

發(fā)布版本

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

修改 composer.json 中的版本信息

"version": "1.0.1"

添加 tag

# git tag -a <version> -m <version message>
git tag -a 1.0.1 -m '初始版本 1.0.1'

# git push origin <version>
git push origin 1.0.1

提交到 packagist

參考: 提交 composer 包

1、提交包

submit > check > submit

image.png

2、添加 webhook

image.png

安裝

如果使用國(guó)內(nèi)鏡像,需等待同步后再安裝

# 更換為國(guó)內(nèi)鏡像,此鏡像工作日5分鐘同步一次,休息日15分鐘同步一次
composer config repo.packagist composer https://packagist.laravel-china.org

# 安裝
composer require "listen/ali-vms[:^1.0]"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容