如何在本地開發Composer包


如何在本地開發Compoer包

周煦辰
2019-05-26

記錄一下如何在本地開發一個Composer包,以及如何發布到Packgist

假設你要開發一個名叫xuchen/biubiubiu的包。

准備工作

你得保證你的系統用已經安裝了

  1. Git
  2. PHP與Composer

並且保證在命令行中都可以使用

准備一個空項目用於測試

我們首先需要在本地新建一個空的Composer項目,用來生成autoload.php文件,以及在其vendor目錄中引入我們之后開發完成的包來進行測試。當然,如果你已經有一個正在開發中的項目,例如一個基於Laravel框架的項目,那么你可以跳過目前這一步。

具體可以先看一下Composer的文檔,如何初始化一個項目

假設我們需要在D盤新建我們的空項目,名稱為composer-workspace,則新建如下目錄

d:/composer-workspace

在剛剛新建的目錄中打開命令行,使用如下命令初始化空項目

composer init

composer會引導你輸入各種參數來完成包的創建,名字填寫<your-name>/composer-workspace即可,其他參數全部默認。我們就假設這個項目叫xuchen/composer-workspace吧。

完成以上的步驟后,我們就能在composer-wokspace目錄下看到一個composer.json文件。

去Github上開個新坑

又到了每個程序員喜聞樂見的環節:去Github上開個新坑。當然了,這次我們希望能把這個Repo完善。

我們得假設你的包還未作為一個Composer包開發。至於為什么要這么假設,大部分的包,都是業務代碼寫着寫着發現可以抽象出一個通用的包來使用,於是想着遷移到一個單獨Composer包中。當然了,前提是:

  1. 原本的代碼就是你的個人項目,沒有使用你的上班時間及公司設備來開發。
  2. 或者,公司支持你的開源行為。

既然是新的包,我們自然要去Github上開個新坑,,Github上開新坑的步驟我就不贅述了。在Github上開一個Repo的目的並不僅僅是為了代碼管理,最后我們想要將代碼發布到Packgist也需要用到Github。

假設我們新開的GithubRepo叫Biubiubiu好了。

Clone你的Repo並放到隨便什么位置

在Github上開好新坑了,就需要把代碼Clone下來,我們就放在如下位置吧:

d:/workspace/biubiubiu

使用Composer初始化你的項目

到上一步的代碼目錄中,運行:

composer init

name填寫xuchen/biubiubiudescription隨便,stabilitydevrequire暫時可以不填,等到composer.json文件生成之后再說。

一路火花帶閃電,項目的composer.json生成了,一個初始化狀態的composer.json非常簡陋,但是問題不大:

{
    "name": "xuchen/biubiubiu",
    "minimum-stability": "dev"
}

規定代碼的命名空間

接下來就要把代碼放進來了,關於這塊,你可以先看看Composer自動加載文檔

要用到autoload,我們就需要規定好我們包代碼的命名空間,假設biubiubiu這個包的命名空間是Xuchen\Biubiubiu\<ClassName>,且代碼放在<包的根目錄>/src目錄下,則需要對composer.json做如下修改:

{
    "name": "xuchen/tencent-cos",
    "minimum-stability": "dev",
    "autoload": {
        "psr-4": {
            "Xuchen\\Biubiubiu\\": "src/"
        }
    }
}

autoload字段中規定了我們需要自動載入的代碼,從上述代碼中可以看到:規定了命名空間為Xuchen\Biubiubiu,該命名空間對應的代碼目錄在<包的根目錄>/src下。

到composer-workspace中引入包

現在我們要回過頭在最開始創建的項目中引入xuchen/biubiubiu

修改d:/composer-worksapce/composer.json,加入repositories字段:

{
    "name": "xuchen/composer-workspace",
    "repositories": {
        "xuchen/biubiubiu": {
            "type": "path",
            "url": "d:/workspace/biubiubiu",
            "options": {
                "symlink": true
            }
        },
    }
}

在當前目錄(d:/composer-worksapce)下,運行:

composer require xuchen/biubiubiu @dev

完成之后,你會發現在當前目錄的vendor中出現了xuchen/biubiubiusymlink。此時,正在開發中的xuchen/biubiubiu包已經正確引入到了composer-workspace這個項目中。

寫一個測試類

到剛剛規定的<包的根目錄>/src下新建一個測試類,就命名為Demo.php好了:

<?php

namespace Xuchen\Biubiubiu;


/**
 * Class Demo
 * @package Xuchen\Biubiubiu
 */
class Demo
{
    public static function execute()
    {
        echo 'It works!';
    }
}

測試包是否已正確引入

composer-workspace項目根目錄下新建一個php腳本,命名為test-autoload.php

<?php

use Xuchen\Biubiubiu\Demo;

require_once './vendor/autoload.php';

Demo::execute();

在當前目錄打開命令行,使用如下命令

php -f test-autoload.php

會看到命令行上輸出:

It works!

這表明xuchen/biubiubiu包中的Demo.php已經通過Composer的自動載入功能正確載入到了composer-workspace項目中。

項目依賴

假如xuchen/biubiubiu項目依賴其他的包,例如常用的Guzzle

biubiubiucomposer.json中加入如下依賴:

{
    "name": "xuchen/tencent-cos",
    "minimum-stability": "dev",
    "require": {
        "guzzlehttp/guzzle": "^6.3"
    },
    "autoload": {
        "psr-4": {
            "Xuchen\\Biubiubiu\\": "src/"
        }
    }
}

composer-workspace項目中使用命令行:

composer update

Composer會在composer-workspace中安裝Guzzle,如此便可在xuchen/biubiubiu中直接引入Guzzle使用。

參考

Developing composer packages locally


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM