Composer三步曲:安裝、使用、發布


轉載地址:https://segmentfault.com/a/1190000011858458

原文是在我自己博客中,小伙伴也可以點閱讀原文進行跳轉查看,還有好聽的背景音樂噢~

composer

    在現代化的PHP開發當中,離開不了各種各樣的組件,那么如何快速在項目中安裝和找到這些組件呢?composer正是為這一目的而出現,如果你還不知道composer,那么你就out了。那么什么是composer,它的作用是什么?如何使用?本文將一一揭曉。

組件

在說composer之前,我們先來了解一下什么組件。因為組件和composer之間密切相關,要想知道composer是如何工作的,我們要先清楚什么是組件。

什么是組件

組件是打包的代碼,用於我們在實際項目中解決某個問題。比如你要輸出一段漂亮的數據,擺脫var_dumpprint_r函數,那么我們就可以使用組件var-dumper組件;我們要寫日志,就可以使用monolog來實現。這些組件,已經有PHP開發者開發出來,我們在項目中當有這樣的場景的時候,直接拿來用就可以。

為什么要使用組件

一句話來概括:別人已經造好的輪子,我們為什么不拿來用呢?我們完全不用重復實現已經實現了的功能,應該要把更多時間用在項目的長遠目標上。

組件的特點

我們在使用PHP組件的時候,要先判斷這個組件是否是我們需要的,是否有一些功能還不嚴謹,就像在菜市場買菜,好壞都有。那么好的組件,基本上都具有這些特征:

作用單一

組件的作用單一,能很好的解決一個問題。就像我們平時在項目中寫方法一樣,一個方法只做一件事情。

小型

PHP組件代碼不多,因為它只為了解決某個問題而生產。

合作

PHP組件之間可以進行良好的合作。PHP的組件之間可以進行合作,以便解決更復雜的問題。而且組件都會放在專屬的命名空間中,當我們引入的時候,也不會與其他組件造成沖突。

測試良好

PHP組件因為體型很小,所以測試起來也很方便。

文檔完善

PHP組件的文檔應該很完善,可以讓開發者們快速了解這個組件的安裝、使用。

獲取組件

我們在簡單了解了組件之后,應該會知道組件的好處了。那么我們如何快速找到組件呢?依賴百度和google搜索類庫嗎?不不,我們已經有了一個專門放置組件的網站Packagist,這個網站就像一個巨大的組件倉庫,我們可以在里面搜索任何我們想要的組件,http、dump、route都有,而且這里的組件都是經過開發者們嚴格測試過的。如果在搜索的時候不知道哪個組件好的話,就去選擇那些使用量高、訪問較多的吧,因為一般這些基本上都會沒有什么大問題。當然不排除還有一些使用量不高但是仍然很優異的組件,這就需要我們去挖掘了。

Composer

在了解了組件之后,我們來說正題———Composer。如果說Packagist是組件庫,那么composer就是PHP組件管理工具了。composer是PHP組件的依賴管理器,它在命令行中使用。通常在你需要使用什么組件的時候,你只需要告訴composer,composer就會自動幫你安裝在你的項目中,只需要一個命令,就是這么簡單、強勢。

安裝

國內小伙伴在安裝composer的時候,可能會遇到很多問題。我在當初安裝composer的時候,也走了不少彎路,現在這里推薦一個快速安裝composer的方法,打開命令行,執行以下命令:
在使用這些命令之前,首先確認已經安裝了php,並且把php設置在了全局變量中,打開命令行輸入php -v能夠看到php版本信息

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"

php composer-setup.php

php -r "unlink('composer-setup.php');"

以上三條,請依次輸入,作用分別是

  1. 下載安裝腳本 - composer-setup.php - 到當前目錄。
  2. 執行安裝過程。
  3. 刪除安裝腳本。
    具體安裝過程,請查看composer中國鏡像網站的具體描述。

如何全局安裝請看:

composer全局安裝

設置完之后,在命令行輸入composer 可以看到composer版本信息。

使用

上述中介紹了如何安裝composer,本章就來說下composer如何使用。我們先模擬下載一個PHP組件,首先我們在Packagist網站搜索dump,我們可以看到一個列表

8J6WVNX57PG9(4_1{8RGSW6.png

這個列表里面展示的是查詢出來的所有dump組件包了,我們看到第一個symfony/var-dumper,composer和組件之間達成了協定,組件名字的第一個信息,以上述為例symfony表示廠商名,var-dumper表示包名。我們在命令行安裝組件的時候,要采用這種形式:

// vendor:廠商名 package:包名
composer require vendor/package

所以我們安裝symfony/var-dumper的時候,命令行輸入:

composer require symfony/var-dumper

composer會自動替我們找到var-dumper的穩定版給我們安裝。我們可以看到安裝成功提示:

成功提示

我們打開目錄可以看到,在目錄下生成了三個文件

目錄

vendor目錄是我們的組件目錄,composer.json執行命令的結果文件,composer.lock列出了所有的php組件,以及具體版本號。

現在我們來使用一下這個dump組件,在根目錄中新建一個php文件:

<?php 

require "vendor/autoload.php"; 

dump(['1','2','3']);

dump(123);

首先引入自動加載器,然后使用dump方法來輸出變量,dump方法正是我們dump組件包里的一個輸出變量的函數,下圖是運行文件后看到的結果,輸出了不一樣的打印樣式:

T77%L{L_[P$I~9SJWS3ML@H.png

發布

上面composer的安裝和使用已經介紹完畢,接下來,我們試試看發布一個簡單PHP組件。其實很簡單,就像自己每天寫功能,把一些公用的方法封裝起來一樣;

廠商和包名

在上文的使用中提到過,在我們開發PHP組件之前,我們可以先定義一下自己即將發布的PHP組件的廠商和包名,比如我要開發一個遍歷目錄下所有文件的組件,那么我可以將我的組件名定義為mingzhongshui/searchfile,mingzhonghsui便是我的廠商名,searchfile是包名,這個組件名將是全局唯一的名稱,以防和其他組件沖突。另外,我們在選擇廠商名之前,可以先在packages中搜索一下,看看有沒有一樣的。

命名空間

每個組件都應有自己的命名空間,這個命名空間並不需要與組件的廠商和包名一致。廠商名和包名只是為了讓composer識別組件,而命名空間則是需要在PHP代碼中使用組件。

組件的目錄結構

  • src/ 組件的源碼
  • tests/ 組件的測試代碼
  • composer.json composer配置文件,用於描述組件。同時還會告訴composer加載器,把符合PSR-4標准的規范的命名空間對應到scr/目錄
  • README.md 這個markdown文件里可以寫組件的開發者以及組件用途、用法等
  • LICENSE 組件的軟件許可證
  • CHANGELOG.md 版本改動記錄

conposer.json

composer.json文件是PHP組件中必不可少的文件,這個文件里面的內容必須是純JSON格式,因為composer會根據這個文件中的內容去加載、安裝PHP組件,我在這里簡單貼一下composer.json的示例內容,這個composer.json文件就是我們剛剛下載dump組件中的:

{
    "name": "symfony/var-dumper",
    "type": "library",
    "description": "Symfony mechanism for exploring and dumping PHP variables",
    "keywords": ["dump", "debug"],
    "homepage": "https://symfony.com",
    "license": "MIT",
    "authors": [
        {
            "name": "Nicolas Grekas",
            "email": "p@tchwork.com"
        },
        {
            "name": "Symfony Community",
            "homepage": "https://symfony.com/contributors"
        }
    ],
    "require": {
        "php": "^5.5.9|>=7.0.8",
        "symfony/polyfill-mbstring": "~1.0"
    },
    "require-dev": {
        "ext-iconv": "*",
        "twig/twig": "~1.34|~2.4"
    },
    "conflict": {
        "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
    },
    "suggest": {
        "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
        "ext-symfony_debug": ""
    },
    "autoload": {
        "files": [ "Resources/functions/dump.php" ],
        "psr-4": { "Symfony\\Component\\VarDumper\\": "" },
        "exclude-from-classmap": [
            "/Tests/"
        ]
    },
    "minimum-stability": "dev",
    "extra": {
        "branch-alias": {
            "dev-master": "3.3-dev"
        }
    }
}

里面根據字面意思應該能理解一部分,我在這里詳細解釋一番:

  • name 廠商名和包名
  • description 這個組件的一些簡短描述。這個值也會在packages中顯示
  • keywords 關鍵字。用於在packages找到這個組件
  • homepage 組件網站的url
  • license 軟件許可證。我們可以在https://choosealicense.com/中...
  • authors 表示這個組件的開發人員信息,是一個數組。每個作者信息至少有姓名和網站url
  • require 這個組件所需的其他PHP組件
  • require-dev 和require相似,表示開發或者測試時需要用到的PHP組件
  • suggest 和require相似,表示建議安裝的PHP組件,composer默認不會自動安裝這里的組件
  • autoload 表示告訴composer加載器 如何加載這個組件

實現組件

以上就是composer.json配置里面常用的參數介紹,接下來,我們就開發完成一個組件。我為了演示,寫好了一個組件,在本章一開始就提到的searchfile,內容很簡單:

<?php namespace Mingzhongshui\File; /** * Query directory file */ class SearchFile { /** * List Folder Contents * @param path $folderName Folder name */ public function searchAllFile ( $folderName ) { $result = array(); $handle = opendir($folderName); if ( $handle ) { while ( ( $file = readdir ( $handle ) ) !== false ) { if ( $file != '.' && $file != '..') { $sonPath = $folderName . DIRECTORY_SEPARATOR . $file; if ( is_dir ( $sonPath ) ){ $result['dir'][$sonPath] = $this->searchAllFile ( $sonPath ); } else { $result['file'][] = $sonPath; } } } closedir($handle); } return $result; } }

一個簡單的查詢目錄所有文件的組件,我已經把它放在了github倉庫中————地址是searchFile

發布組件

我們可以通過github倉庫的形式提交到packages,首先我們得有一個packagist的賬號,可以通過github登陸packagist,登陸之后,在頁面右上角會有一個submit提交按鈕,輸入組件所在的github倉庫地址

submit

然后點擊check,之后點擊submit,packagist會自動創建組件頁面

packsearchFile
packsearchFile

我們可以看到,packagist自動從組件的composer.json中獲取到了組件的名稱、描述、關鍵字等信息。至此,我們的組件就發布成功了。

使用組件

在命令行輸入

composer require mingzhongshui/searchfile

他會自動幫你安裝searchfile組件,如果出現報錯可以使用開發版本:

composer require mingzhongshui/searchfile:dev-master

使用這個的原因是,有時候composer用的是國內的鏡像,他還沒有同步到源鏡像中。

設置鈎子

當我們把PHP組件發布到packagist之后,如果我們要更新我們已經發布的組件時候該如何做呢?這時候有一個懶辦法,設置github鈎子使它自動同步更新packagist的組件。
訪問https://packagist.org/about#how-to-update-packages,這個地址是設置鈎子的說明,我們找到設置鈎子的url https://packagist.org/api/bitbucket?username=mingzhongshui&apiToken=API_TOKEN,這里的mingzhongshui是我packagist賬戶名,根據自己的真實情況替換即可;API_TOKEN指的是自己packagist賬戶中的API TOKEN,在https://packagist.org/profile/頁面中。

打開自己的github PHP組件主頁,在setting中找到Webhooks,添加鈎子,保存

設置github鈎子

即可。

總結

以上就是關於composer安裝、使用以及發布的介紹。那么我們有一個問題,我們在實際中如何快速找到優秀的PHP組件呢,外國有位猿友ziadoz已經整理好了一些優秀的組件,並且列了一個列表,在github的鏈接為awesome-php,有需要什么組件的話,可以來這里看一下,作為參考。好了,以上就是關於composer的周邊故事。


免責聲明!

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



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