中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

composer是什么

發布時間:2020-12-09 13:43:20 來源:億速云 閱讀:330 作者:小新 欄目:軟件技術

小編給大家分享一下composer是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Composer是PHP社區推薦的依賴管理工具。Composer之于PHP猶如npm之于Node,幾乎是做現代化PHP開發的必備技能。本文簡要回顧相關概念和Composer用法。

拓展和包

與之相關的概念是框架和庫,關于框架和庫的區別,可以查看本人之前寫的這篇文章

拓展和包是兩個非常相近的概念。在PHP世界里,一般可以這樣理解和區分兩者:拓展(extension)和模塊(module)等價,是用C語言寫的功能合集;包(package)和庫(library)等價,主要是用PHP實現的功能合集;拓展以動態鏈接庫(dll或so)的形式加載,包則是通過require/include方式加載。絕大部分時候,兩者混用不會造成理解上的困難。

常見的拓展包括GD、ZIP、XML、MySQLi、OPCache等,常見的包包括PHPMailer、PHPOffice、HTMLPurifier等。

PEAR和PECL

在Composer流行之前,PEAR和PECL是更為PHP開發者所知的兩個工具(社區)。PEAR是PHP拓展和應用倉庫(PHP Extension and Application Repository)的縮寫,官網http://pear.php.net ;PECL是PHP拓展社區庫(PHP Extension Community Library)的縮寫,官網http://pecl.php.net。

兩者的區別可用拓展和包來區分:PECL托管拓展,源代碼多為C文件,例如APC、AMPQ等;PEAR托管包,功能用PHP實現,如PHP CodeSniffer、HTTP Request等;PEAR對應pear命令,PECL對應pecl命令,可用這兩個命令安裝和管理拓展和包(pear的build/pickle子命令也可以編譯PECL中的拓展)。兩者互為補充,官網以姐妹(sisters)形容兩者的關系。

PECL是官方拓展的補充,目前仍處于活躍狀態,一些優秀的拓展有成為官方拓展的潛質。韓天峰大神的swoole拓展也托管在PECL中,國內名氣非常高。相比之下PEAR已是明日黃花。PEAR2和Pyrus(下一代的PEAR包安裝工具,基于PHP5.3+構建,官網http://pear2.php.net)的出現也未能挽救PEAR。PEAR沒落伴隨著本文主角Composer的興起。

PEAR的定位是“提供可復用的PHP組件”,以中心化的方式為開發者提供功能包。中心化發布的方式保證了代碼的質量,同時帶來維護上的不便:通過評審的包才能發布,包過時現象嚴重。PEAR安裝的包是全局的,不能為單獨項目安裝依賴包,非特權用戶不能自行安裝依賴包。其他缺點還包括糟糕的依賴管理。隨著Github的流行和Composer的出現,包管理進入Composer時代。PEAR已經完成其歷史使命,可以安心的去了。

Composer

嚴格來說,Composer的定位是依賴管理工具而非包管理器。Composer中文網對Composer工作介紹如下:

Composer 將這樣為你解決問題:

a) 你有一個項目依賴于若干個庫。

b) 其中一些庫依賴于其他庫。

c) 你聲明你所依賴的東西。

d) Composer 會找出哪個版本的包需要安裝,并安裝它們(將它們下載到你的項目中)。

PEAR能做的事情,Composer都能做(包括安裝PECL拓展),部分還能做得更好。Composer默認把包安裝在項目目錄下,普通用戶就能正常使用(Composer官方建議不要以root身份執行composer命令);鼓勵遵循最佳實踐(即大名鼎鼎的PSR規范,詳情見PHP-FIG官網https://www.php-fig.org),極大的推動PHP社區編碼風格的規范化;Composer是去中心化的平臺,任何人均可發布代碼包;發布包無需評審,包的質量由用戶投票決定...作為PEAR的繼任者,Composer的表現經受住了社區的考驗,并成為事實上的依賴管理標準工具。

Composer目前已經形成龐大的生態,在數量上,Composer的包遠超PEAR。由于任何人均可自由發布包且無需評審,Composer生態中的包可能存在代碼質量參差不齊、代碼風格各異、后門漏洞等隱憂。另外Composer的依賴管理以項目為單位,一臺機器上可能多次安裝同一個包。但瑕不掩瑜,總體而言,Composer極大的改變了PHP的開發生態,促進了代碼交流和社區發展。

Composer用法

Composer為管理的項目的依賴而生,項目中的composer.json文件是其工作的依據。該文件中最重要的部分是require部分,該部分告訴Composer期望安裝的包及其版本,例如:

{
    "name": "tlanyan/foo",
    "version": "1.0.0",
    ....
    "require": {
        "php": ">=5.4.0",
        "yiisoft/yii2": ">=2.0.6",
        "yiisoft/yii2-swiftmailer": "*",
        "yiisoft/yii2-redis": ">=2.0.0",
        "smarty/smarty": "< =3.1.25",
        "yiisoft/yii2-smarty": ">=2.0.0",
        "phpoffice/phpexcel": ">=1.8.0",
        "tecnickcom/tcpdf": "~6.2.0"
    },
    ....
}

然后運行composer install命令,Composer會自動分析依賴,安裝最合適的包到vendor目錄下。加-v(-vv, -vvv)選項會打印命令執行過程中的詳細信息。安裝完畢后,vendor目錄下會生成autoload.php文件。在項目的入口文件中包含此文件: require __DIR__ . "/vendor/autoload.php";,接下來便可在項目的任何地方引用依賴包中的接口和類。

install命令,Composer提供了許多其他命令管理依賴。常用的命令場景包括:查找依賴、引入依賴、安裝依賴、更新依賴。分別對應的命令是:

  1. composer search: 根據關鍵字查找依賴包,例如查找本人發布的包:composer search tlanyan。該命令等同于上https://packagist.org進行包查找;
  2. composer require: 引入依賴,聲明項目或者全局(global,用戶名全局,非系統全局)依賴某個包, 例如聲明需要swiftmailer包: composer require [global] "swiftmailer/swiftmailer:dev-master";該命令更新composer.json文件,并默認立即安裝依賴(--no-update選項可阻止默認安裝);效果等同于編輯composer.json文件,然后執行install命令;
  3. composer install:安裝composer.json聲明的依賴包,最終安裝的依賴包版本可能取決于有無composer.lock文件;
  4. composer update: 更新依賴到最新版本,相當于刪除composer.lock文件后執行composer install

以上四條命令涵蓋使用Composer的大部分場景。以下是幾個常用的輔助命令,與依賴分析相關:

  1. composer info: 查看安裝的依賴包信息,與composer show等價;
  2. composer dumpautoload: 加-o選項可導出優化的加載器;
  3. composer why(-not): 查看(不)安裝某個包的原因。

總結

從拷貝第三方代碼到項目中(1994),到PEAR安裝依賴包(1999),再到Composer興起(2012),PHP社區經歷了將近20年的探索。PHP這門古老的語言,也在不斷的發展更新,在web領域一直發光發熱。Composer作為目前PHP包依賴管理的最佳工具,值得每一位PHP開發人員掌握。

以上是“composer是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梅州市| 高淳县| 奇台县| 石狮市| 梓潼县| 平邑县| 墨江| 东安县| 襄汾县| 铜梁县| 霍林郭勒市| 西乌珠穆沁旗| 英吉沙县| 南城县| 读书| 翼城县| 漯河市| 岳池县| 日土县| 屏边| 卓尼县| 九龙城区| 河间市| 绥芬河市| 金湖县| 呼玛县| 和田县| 师宗县| 万州区| 淮南市| 呼图壁县| 白玉县| 招远市| 乌鲁木齐县| 陵水| 文昌市| 白水县| 洮南市| 湾仔区| 资溪县| 金溪县|