如何在本地開發Composer包

如何在本地開發Compoer包

周煦辰
2019-05-26php

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

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

準備工做

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

  1. Git
  2. PHP與Composer

而且保證在命令行中均可以使用github

準備一個空項目用於測試

咱們首先須要在本地新建一個空的Composer項目,用來生成autoload.php文件,以及在其vendor目錄中引入咱們以後開發完成的包來進行測試。固然,若是你已經有一個正在開發中的項目,例如一個基於Laravel框架的項目,那麼你能夠跳過目前這一步。json

具體能夠先看一下Composer的文檔,如何初始化一個項目bash

假設咱們須要在D盤新建咱們的空項目,名稱爲composer-workspace,則新建以下目錄composer

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

相關文章
相關標籤/搜索