開發工具:用Composer管理相依性

2021-02-23 php中文網最新課程

composer原本是Symfony這個PHP Framework中,設計來管理套件相依性的工具,因為簡單又好用,現在已經成為一個獨立的開放原始碼計畫。許多Framework以及程式庫,現在都可以使用composer來安裝管理。

其實在PHP上,很早就有這類的套件相依性管理工具,也就是PEAR。不過PEAR的設定過於繁複,也很難針對個別專案設定各自的相依性,所以現在Composer受到大眾的喜愛。

這個簡介只針對使用者,所以不會對於套件開發者需要知道的部份著墨。

* 安裝

如果是Windows的使用者,只需要下載安裝檔並且執行安裝:

如果要手動安裝,可以參考官網的指引:

如果是UNIX Like系統的使用者,可以透過這樣的指令來安裝:(需要先安裝curl)

curl -sS https://getcomposer.org/installer | php

安裝程式會檢查PHP的設定,然後下載composer.phar到當前的目錄。要執行composer的話,可以執行

或是乾脆把它改成執行檔

>mv composer.phar composer>chmod +x composer

然後執行./composer。

不過如果再不同的工作目錄中都需要的話,而且執行權限也沒問題,也可以直接把檔案複製到/usr/local/bin。

* 設定相依性

在專案中使用composer時,首先要產生一個composer.json檔,裡面指定要使用的套件與版本。例如需要用phpmailer來寄信時,可以這樣指定:

{"require": {"phpmailer/phpmailer": "~5.2.7"}}

然後執行安裝:

eng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ composer installLoading composer repositories with package informationInstalling dependencies (including require-dev)  - Installing phpmailer/phpmailer (v5.2.7)    Downloading: 100%         Writing lock fileGenerating autoload filesFeng-Hsu-Pingteki-MacBook-Air:2-1a fillano$

這樣就安裝好了。看一看到底裝了什麼:

Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ ls -ltotal 16-rw-r--r--  1 fillano  staff    66 10 11 18:15 composer.json-rw-r--r--  1 fillano  staff  2330 10 11 18:16 composer.lockdrwxr-xr-x  5 fillano  staff   170 10 11 18:16 vendor

根據目錄中的檔案可以發現,本來只有composer.json檔案,安裝之後多了一個composer.lock檔案以及vendor目錄。先看一下composer.lock的內容:

Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ cat composer.lock{    "_readme": [        "This file locks the dependencies of your project to a known state",        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"    ],    "hash": "065c23f92d5ae579cb91beff67f41196",    "packages": [        {            "name": "phpmailer/phpmailer",            "version": "v5.2.7",            "source": {                "type": "git",                "url": "https://github.com/PHPMailer/PHPMailer.git",                "reference": "8717a79565b2c0ed67f851d70e1949febdf3b226"            },            "dist": {                "type": "zip",                "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/8717a79565b2c0ed67f851d70e1949febdf3b226",                "reference": "8717a79565b2c0ed67f851d70e1949febdf3b226",                "shasum": ""            },            "require": {                "php": ">=5.0.0"            },            "require-dev": {                "phpdocumentor/phpdocumentor": "*",                "phpunit/phpunit": "*"            },            "type": "library",            "autoload": {                "classmap": [                    "class.phpmailer.php",                    "class.pop3.php",                    "class.smtp.php"                ]            },            "notification-url": "https://packagist.org/downloads/",            "license": [                "LGPL-2.1"            ],            "authors": [....下略

看起來是剛剛安裝套件的資訊。

再看一下vendor目錄有什麼東西:

Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ tree vendorvendor├── autoload.php├── composer│   ├── ClassLoader.php│   ├── autoload_classmap.php│   ├── autoload_namespaces.php│   ├── autoload_real.php│   └── installed.json└── phpmailer    └── phpmailer        ├── LICENSE        ├── PHPMailerAutoload.php        ├── README.md        ├── changelog.md        ├── class.phpmailer.php        ├── class.pop3.php        ├── class.smtp.php        ├── composer.json        ├── docs        │   ├── Callback_function_notes.txt        │   ├── DomainKeys_notes.txt        │   ├── Note_for_SMTP_debugging.txt        │   ├── extending.html        │   ├── faq.html        │   ├── generatedocs.sh        │   └── pop3_article.txt...下略

看起來除了phpmailer目錄安裝了phpmailer在裡面之外,主要還有autoload.php檔案以及composer目錄。

原來要載入透過composer安裝的套件,需要先引用vendor/autoload.php檔案,然後就可以使用phpmailer。寫一個簡單的程式測試一下:

<?phprequire 'vendor/autoload.php';$phpmailer = new PHPMailer;

執行以後沒有出錯,表示phpmailer可以正常載入...接下來就看一下這幾個檔案的用途。

* composer.json

對使用者來說,這個檔案主要是用來維護相依性。只要在檔案中的"require"屬性中加入一個物件,屬性名稱是套件名稱,值就是版本。套件名稱分成兩個部分,第一個部分是vendor,第二個部分才是實際套件名稱,使用"\"隔開。版本有幾種規則:

直接指定版號,例如2.7.3

指定主版號之後,使用"*"指定次版號,例如2.7.*表示版號大於等於2.7.0,小於2.8.0的版本

使用>、>=、!=、<=、<等在版號前,表示使用這些比較運算子來指定版號規則,可以使用多個規則並用","分開

使用"~"在版號前,表示下一個版號變動之前的版本。例如~2.7,表示版本大於等於2.7,小於3.0

在版號之後,還可以加上不同的stability flag,例如2.7.*@beta。可以使用的flag有:dev、alpha、beta、RC、stable

指定好版本後,執行composer install,就會根據指定的版本規則,安裝最新版本的套件。

實際上每個有composer.json檔案的目錄,也是一個套件的根目錄。不過如果是要做成給別人使用的套件,還需要加上許多設定,這些就不在討論範圍內了。

* composer.lock

在首次安裝套件完畢後,會產生這個檔案,裡面記錄了所安裝套件的資訊。這個檔案的真正作用是:如果目錄中有這個檔案,執行安裝時,就不會去搜尋更新的版本,而是依照這個檔案中記錄的版本來安裝。這個設計很重要,因為新版的套件很有可能與目前使用的版本不相容,如果不是使用同樣版本,很難保證系統的穩定。過去在使用pear來管理套件時,如果不注意,就有可能發生升級導致的慘劇。

除此之外,只要把這個檔案加入版本管理,所有開發者目錄中也都會有這個檔案,所以大家使用的套件版本也都會是一致的,這樣可以減少開發時,使用套件版本不一導致的程式相容問題。

* vendor目錄

所有套件都會放置在這個目錄,並且依照<vendor name>/<package name>的目錄結構來組織。

只要引用這個檔案,就可以載入套件中所有對外公開的類別。基本上每個套件都會定義自己的autoload規則,在安裝時,composer會把這些規則加入,這樣透過autoload.php就可以直接使用所有已安裝的類別。

從這些地方可以看到,Composer這個套件管理工具,在設計上已經做了很周密的考量,只需要簡單指定要使用的套件及版本,一個指令就可以安裝完畢,引用一個膽案之後就能使用,這樣真的非常方便。所以目前幾乎所有的程式庫以及Framework,應該都逐漸在套用這個工具了。未來在開發PHP程式,恐怕最基本的工具也就是composer。

相關焦點

  • 開發工具:Microsoft Visual Studio 2010
    使用同類最佳IDE創建未來,使用從初始設計到最終部署的完整工具集進行開發。Visual Studio是一個基本完整的開發工具集,它包括了整個軟體生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發環境(IDE)等等。
  • 開發工具:Microsoft Visual Studio 2015
    使用同類最佳IDE創建未來,使用從初始設計到最終部署的完整工具集進行開發。Visual Studio是一個基本完整的開發工具集,它包括了整個軟體生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發環境(IDE)等等。
  • 助力大幹,工具創新管理走在前
    為響應公司「大幹二季度的生產經營目標」,落實工具創新管理做到「從哪裡借用,還哪裡,有登記,有臺帳」。FB一班利用生產間隙就本班組所用工具開展統一存放的策劃並實施改善。班組把所有工具收集到一塊,根據用途、規格把它們分類清楚。
  • 漲姿勢:前端開發工具合集
    收集整理了一些前端網址與工具,希望對喜歡拼圖的小夥伴有幫助,手機閱讀不方便可以先收藏到微信然後再通過PC微信打開收藏到瀏覽器。1.  MarkMan     ——    設計師,前端工程師必備2.  VIM     ——    超快的編輯器3.
  • 【巨星公益】用安全守護愛——巨星鋼盾工具向交警、環衛等部門贈送口罩
    近期,新型冠狀病毒感染肺炎爆發,全國多地出現一罩難求,多家網店也出現脫銷情況,巨星集團旗下杭州巨星鋼盾工具有限公司擁有工業級的一站式個人防護系列產品,第一時間,發出主題為「鋼盾口罩 ,用安全守護愛」大型公益活動,向守護在杭城的各界基層人士交警
  • iPhone虛擬定位教程:已更新iOS12.2開發工具包
    最近收到非常多小夥伴的諮詢,表示有沒有最新的iOS 12.2開發工具包!
  • 好工具:一款程式設計師必備正則表達式工具
    ,用起來香,但是規則記起來,著實就有點坑,好不容易記住,過幾天又忘記了;之前也總結過一篇常用正則表達式的文章【史上最全正則表達式,值得收藏備用】,裡面涵蓋了你幾乎用的上的是所有表達式;但是,。。。今天來推薦一款在線的正則表達式工具:i hate regex名字就可以看出,耿直同行。
  • 在俄羅斯的世界盃足球賽上,開發廢棄物管理概念是個大學問
    「可持續發展戰略」的一部分是開發廢物管理概念,其中包含一系列方法,要求和計劃,用於在所有官方場所和活動中組織量身定做的廢物收集和回收流程 - 以及通知工具,以便通知和激勵觀眾相應地處置他們的廢物。
  • 入門必看:瀑布式項目管理經驗分享
    瀑布軟體開發模型(Waterfall Software Development Model)創建於20世紀60年代,強調的是軟體開發在工程學科中的重要性。今天,許多企業仍然使用瀑布方法。活動像瀑布一樣沿著列表按順序向下流動,是計劃項目最簡單的方法。在此基本系統中,團隊必須先完成一個步驟,然後再開始下一個步驟。
  • 大數據2015:Hadoop和大數據-60款頂級大數據開源工具
    它最初是由谷歌開發的,但現在也被本文介紹的另外幾個大數據工具所使用,包括CouchDB、MongoDB和Riak。支持的作業系統:與作業系統無關。Oozie這種工作流程調度工具是為了管理Hadoop任務而專門設計的。它能夠按照時間或按照數據可用情況觸發任務,並與MapReduce、Pig、Hive、Sqoop及其他許多相關工具整合起來。支持的作業系統:Linux和OS X。
  • 討論:真正精通一門開發語言到底是什麼程度?
    真正精通一門開發語言到底是什麼程度?下面是部分網友的回覆:@零零水對大部分人,hr,主管來說,精通就是熟練用,解決問題。更高標準的精通,有嘴炮價值,無實際價值。真到那個水平,你用精通難道不是侮辱人家水平麼?精通兩個字能概括?
  • G7與東京海上日動(中國)達成戰略合作協議,攜手開發貨車風險管理創新產品
    10月28日,G7與東京海上日動火災保險(中國)有限公司在上海籤署戰略合作協議,未來雙方將在預防和降低道路貨物運輸安全損失領域攜手共創,共享技術與數據,共同探索提升公路貨運安全的有效手段和機制,開發全新技術環境下的安全和保險產品
  • 《聖歌》驚人開發內幕:原本不是刷子遊戲 寒霜引擎太難用
    根據BioWare前開發者們,《聖歌》早期開發過程中原本的定位並不是一個刷裝備遊戲,在遊戲的開發過程中寒霜引擎給BioWare帶來了很多難題,E3 2017首個演示很多內容都是假的。《聖歌》起初的名字叫《外部(Beyond)》,原計劃打造成一個在線多人生存/動作遊戲,而不是一個刷裝備遊戲。
  • 暗網系列之:Tor網絡上很多站點使用Facebook開發的「Hack」語言開發而成
    眾所周知,Facebook起初主要使用PHP語言進行編程,但隨著用戶量的擴大,對伺服器的消耗以及安全性的考慮,促使Facebook內部專門成立了一個項目組,開發了一個兼容動態和靜態優勢的「Hack」語言。開發者希望通過「Hack」程式語言提高他們的日常工作效率。之後還推出了開源版本,希望可以幫助更多的開發人員快速的構建網站和軟體。
  • 調查報告:現在的開發人員對資料庫的使用方式
    而2015年StackOverflow開發者調查顯示,36%的開發人員最近使用過SQL。也就是說,現如今大約有700萬開發人員使用SQL。在過去四年裡,不管是在StackOverflow上,還是在DBA StackExchange上,有關SQL的問題一直有增無減。為此,JetBrains開發了一款資料庫&SQL專用開發工具。
  • 鋼盾口罩 ,用安全守護愛
    世界浙商網訊 近期,新型冠狀病毒感染肺炎爆發,全國多地出現一罩難求,多家網店也出現脫銷情況,杭州巨星鋼盾工具有限公司擁有工業級的一站式個人防護系列產品
  • 細數2015電動工具行業大事件!!!
    「2015年度中國電動工具十大品牌評選」由品牌排行網主辦,效菘世紀(北京)網絡技術有限公司承辦。評選活動於5月12日完美降下帷幕,「2015年度中國電動工具十大品牌」榜單的優秀企業和品牌如下:第一名:博世 博世電動工具(中國)有限公司第二名:牧田 牧田(中國)有限公司第三名:東成 江蘇東成電動工具有限公司第四名:雷亞 浙江精力工具有限公司第五名:鐵錨 江蘇鐵錨工具有限公司
  • 免費在線工具:載體設計軟體GenSmart Design
    再後來,遇見了Snapgene,大呼:哇, 還有此等好用的設計軟體,but,怎麼還要收費… …再後來,這些都不重要了;畢竟,和團隊一起開發了一個產品,更重要的是,免費;對,沒有看錯,終身免費!全部功能免費!
  • OLAMI 智能音箱:新手開發教程
    密碼:m33h(註:因微信不能設置外網超連結,大家可以手動複製)硬體部分請自備步驟一、刷入映像    1.將下載好的映像壓縮包解壓    2.將SD卡插入讀卡器並連接電腦    3.用鏡像燒錄工具將映像檔燒入
  • Win10變成Mac OS:比任何美化主題都好用的工具
    主要是為Win10開發的軟體,但是也兼容低版本系統,如Win7。軟體還提供全套的Mac OS圖標,要完全給Windows換皮也是可以的!軟體包括Dock(底下部分)和Finder(頂上部分),其中Dock的功能已經全部完成,Finder還在寫,但是已經能實現比如藍牙,WIFI,亮度,聲音等功能了,而且也能接管程序的操作菜單欄(左上角)。主流社交軟體的消息提醒也支持,具體的請見官網。