首頁 開發工具 composer 教你用Composer管理依賴性

教你用Composer管理依賴性

Aug 07, 2020 pm 01:23 PM
composer

下面由composer教學欄位來介紹用Composer管理依賴性,希望對需要的朋友有幫助!

教你用Composer管理依賴性

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

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

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

* 安裝

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

https://getcomposer.org/Composer-Setup.exe
登入後複製

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

http://getcomposer.org/doc/00-intro.md#installation-windows
登入後複製

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

curl -sS https://getcomposer.org/installer | php
登入後複製

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

php composer.phar
登入後複製

或是乾脆把它改成執行檔

>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 install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing phpmailer/phpmailer (v5.2.7)
    Downloading: 100%         
Writing lock file
Generating autoload files
Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$
登入後複製

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

Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ ls -l
total 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.lock
drwxr-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 vendor
vendor
├── 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。寫一個簡單的程式測試一下:

<?php
require &#39;vendor/autoload.php&#39;;
$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/autoload.php
登入後複製

只要引用这个档案,就可以载入套件中所有对外公开的类别。基本上每个套件都会定义自己的autoload规则,在安装时,composer会把这些规则加入,这样透过autoload.php就可以直接使用所有已安装的类别。

=====

从这些地方可以看到,Composer这个套件管理工具,在设计上已经做了很周密的考量,只需要简单指定要使用的套件及版本,一个指令就可以安装完毕,引用一个胆案之后就能使用,这样真的非常方便。所以目前几乎所有的程式库以及Framework,应该都逐渐在套用这个工具了。未来在开发PHP程式,恐怕最基本的工具也就是composer。

以上是教你用Composer管理依賴性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Composer 的進階功能:別名、腳本與衝突解決 Composer 的進階功能:別名、腳本與衝突解決 Jun 03, 2024 pm 12:37 PM

Composer提供進階功能,包括:1.別名:定義套件便捷名稱以便重複引用;2.腳本:安裝/更新套件時執行自訂指令,用於建立資料庫表或編譯資源;3.衝突解決:使用優先權規則、滿足性限制和套件別名解決多個套件對同個依賴版本的不同需求,以避免安裝衝突。

PHP 微服務容器化的敏捷開發與維 PHP 微服務容器化的敏捷開發與維 May 08, 2024 pm 02:21 PM

答案:PHP微服務採用HelmCharts部署進行敏捷開發,並使用DockerContainer容器化以實現隔離和可擴展性。詳細描述:使用HelmCharts自動​​部署PHP微服務,實現敏捷開發。 Docker映像允許對微服務進行快速迭代和版本控制。 DockerContainer標準隔離微服務,而Kubernetes負責管理容器的可用性和可擴充性。利用Prometheus和Grafana監控微服務效能和健康狀況,並創建警告和自動修復機制。

PHP 數組轉物件的常見方式有哪些? PHP 數組轉物件的常見方式有哪些? Apr 28, 2024 pm 10:54 PM

PHP陣列轉物件的方法:使用stdClass類別使用json_decode()函數使用第三方函式庫(如ArrayObject類別、Hydrator函式庫)

PHP 程式碼版本控制與協作 PHP 程式碼版本控制與協作 May 07, 2024 am 08:54 AM

PHP程式碼版本控制:PHP開發中常用的版本控制系統(VCS)有兩個:Git:分散式VCS,開發人員本地儲存程式碼庫副本,方便協作和離線工作。 Subversion:集中式VCS,程式碼庫唯一副本儲存在中央伺服器上,提供更多控制。 VCS幫助團隊追蹤變更、協作並回滾到早期版本。

PHP 資料結構的視覺化技術 PHP 資料結構的視覺化技術 May 07, 2024 pm 06:06 PM

PHP資料結構視覺化有三種主要技術:Graphviz:開源工具,可建立圖表、有向無環圖和決策樹等圖形表示。 D3.js:JavaScript函式庫,用於建立互動式、資料驅動的視覺化,從PHP產生HTML和數據,再用D3.js在客戶端視覺化。 ASCIIFlow:用於建立文字表示資料流程圖的函式庫,適合流程和演算法的視覺化。

PHP CI/CD 在 DevOps 專案中的作用 PHP CI/CD 在 DevOps 專案中的作用 May 08, 2024 pm 09:09 PM

PHPCI/CD是DevOps專案中的關鍵實踐,它可實現自動化建置、測試和部署流程,從而提高開發效率和軟體品質。典型的PHPCI/CD管道包含以下階段:1)持續整合:每當程式碼發生變更時,都會自動建置和測試程式碼。 2)持續部署:透過自動部署經過測試和整合的程式碼到生產環境,從而加快交付速度。透過實施PHPCI/CD管道,可以提高開發效率,改善軟體質量,縮短上市時間並提高可靠性。

PHP數組分頁中如何使用Redis快取? PHP數組分頁中如何使用Redis快取? May 01, 2024 am 10:48 AM

使用Redis快取可以大幅優化PHP數組分頁的效能。可透過以下步驟實現:安裝Redis客戶端。連接到Redis伺服器。建立快取數據,將每頁資料儲存到Redis雜湊中,金鑰為"page:{page_number}"。從快取中獲取數據,避免對大型數組進行昂貴的操作。

如何使用 PHP CI/CD 實現快速迭代? 如何使用 PHP CI/CD 實現快速迭代? May 08, 2024 pm 10:15 PM

答:利用PHPCI/CD實現快速迭代,包括設定CI/CD管道、自動化測試和部署流程。設定CI/CD管道:選擇CI/CD工具,配置程式碼儲存庫,定義建置管道。自動化測試:編寫單元和整合測試,使用測試框架簡化測試。實戰案例:使用TravisCI:安裝TravisCI,定義管道,啟用管道,查看結果。實現持續交付:選擇部署工具,定義部署管道,自動化部署。效益:提高開發效率、減少錯誤、縮短交貨時間。

See all articles