關於Composer你需要知道的一些知識

思考

 

當你有一個好的idea,寫了一個自我感覺還不錯的工具或者組件,並迫不及待的想讓別人去試試的時候,你會怎麼做?

 

 

把代碼貼在博客

需要花時間複製粘貼,閱讀代碼

把代碼發佈在github

還是需要花時間down\clone,不能直接組件化加載

把代碼發佈在composer ✔️

只需要知道是幹嘛的,組件化引入直接使用

 

或者你看到一個好的composer的類庫,爲什麼可以直接加載進來,它是怎樣被髮布出來供大家使用的呢?

 

介紹

 

Composer 是一個用於 PHP 依賴管理的工具。它實現了讓你聲明項目所依賴的庫,並幫你完成安裝 / 更新過程。

 

composer.json

 

最熟悉的文件,可以手寫也可以命令行生成,其中定義了我們當前項目的依賴項。json裏有很多配置項,下面我們用一個熟悉的包guzzlehttp來舉例說一下每個字段代表的意義。

 

{
     "name": "guzzlehttp/guzzle",//composer 包名
     "type": "library",//這是默認類型,它會簡單的將文件複製到vendor目錄
     "description": "Guzzle is a PHP HTTP client library",//一個包的簡短描述。通常這個最長只有一行。
     "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"],//在composer搜索用到
     "homepage": "http://guzzlephp.org/",//項目主頁
     "license": "MIT",//包的許可協議
     "authors": [//作者
         {
             "name": "Michael Dowling",
             "email": "[email protected]",
             "homepage": "https://github.com/mtdowling"
         }
     ],
     "require": {//必要的依賴
         "php": ">=5.5",
         "guzzlehttp/psr7": "^1.4",
         "guzzlehttp/promises": "^1.0"
     },
     "require-dev": {//開發版的依賴,一般幫助開發階段使用
             "ext-curl": "*",//可以幫你指定需要的 PHP 擴展(包括核心擴展)例如在編輯器的自動提示功能
             "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
             "psr/log": "^1.0"
     },
     "autoload": {//自動加載映射
             "files": ["src/functions_include.php"],//自動加載的函數庫文件 相當於直接require該文件,直接使用其中function 數組可配置多個
             "psr-4": {
                "GuzzleHttp\\": "src/"
             }
     },
     "autoload-dev": {//一般將單元測試的路徑放在這裏
             "psr-4": {
                "GuzzleHttp\\Tests\\": "tests/"
             }
     },
     "suggest": {//建議安裝的包
             "psr/log": "Required for using the Log middleware"
     },
     "extra": {//可選項
             "branch-alias": {
                "dev-master": "6.3-dev"
             }
     },
     "bin": [//composer安裝時會將script腳本文件複製到vendor/bin中 比如 php vendor/bin/script 執行一些組件的腳本功能
         "bin/script"
     ]
}

 

Coding

 

下面我寫了一個最簡單的工具類,目錄如下

 

├── README.md
├── composer.json
└── src
    ├── Db.php
    ├── DbInterface.php
    ├── Test.php
    └── function.php

 

代碼都在src目錄下,composer.json內容如下

 

{
    "name": "ty_coder/composertest",
    "description": "a test composer library ",
    "authors": [
        {
        "name": "tyCoder"
        }
    ],
    "license": "MIT",
    "require": {
        "php": ">=5.4"
    },
    "autoload": {
        "psr-4": {
            "ty\\": "src/"
        },
        "files": [
            "src/function.php"
        ]
    }
}

 

然後發佈在github上,下一步我們將項目發佈在composer。

 

發佈

 

登陸composer倉庫,訪問https://packagist.org/packages/submit

 

 

composer倉庫會幫我們驗證項目是否滿足發佈條件,在我們完成發佈後,就可以通過composer require 在任何項目中加載我們編寫的工具類庫了。不過還有一個問題,我們想要更新我們的工具類庫,並保留之前的版本,我們該怎樣做?這些composer其實都爲我們準備了超級方便的鉤子設置方案了,請看下圖。

 

 

 

通過個人資料我們拿到自己的API token,然後去我們的github的倉庫頁,在設置裏找到Webhooks選項,設置一下鉤子即可,我們每次git事件都會同步給composer,每次的tag會在composer發佈一個版本,注意composer會忽略前綴,所以v這個字母被忽略了奧。

 

     

require

 

執行composer require ty_coder/composertest 後,我們的工具類庫被加載到vendor目錄下,讓我們簡單測試一下。

 

  

 

好的,我們發現編輯器已經提示我們,我們的類庫文件被找到啦,那麼本文在這裏對composer的一些常用知識的簡單介紹也告一段落了。

 

other

 

   在閱讀源碼的過程中我們會發現,優良的composer類庫或者項目中還會有單元測試模塊tests目錄,二進制腳本目錄bin目錄,自動化部署文件.travis.yml文件,還有Dokerfile等等。所以composer中是可以有其他類型文件存在的,特定的文件還會觸發特定的功能事件,詳細的我們可以去官方文檔進一步學習奧。

 

reference

https://learnku.com/docs/composer/2018  Composer 中文文檔

https://packagist.org/ Composer官方庫

https://travis-ci.org/ Travis CI 持續集成服務

https://github.com/ziadoz/awesome-php#php-websites 收錄很多優秀Composer組件的好地方

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章