溫馨提示×

溫馨提示×

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

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

如何用Composer管理相依性

發(fā)布時間:2021-01-18 09:44:54 來源:億速云 閱讀:159 作者:小新 欄目:軟件技術

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

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

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

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

* 安裝

如果是Windows的使用者,只需要下載安裝檔并且執(zhí)行安裝:

https://getcomposer.org/Composer-Setup.exe

如果要手動安裝,可以參考官網(wǎng)的指引:

http://getcomposer.org/doc/00-intro.md#installation-windows

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

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

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

php composer.phar

或是干脆把它改成執(zhí)行檔

>mv composer.phar composer
>chmod +x composer

然后執(zhí)行./composer。

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

* 設定相依性

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

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

然后執(zhí)行安裝:

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$

這樣就安裝好了??匆豢吹降籽b了什么:

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

根據(jù)目錄中的檔案可以發(fā)現(xiàn),本來只有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 'vendor/autoload.php';
$phpmailer = new PHPMailer;

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

* composer.json

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

  • 直接指定版號,例如2.7.3

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

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

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

  • 在版號之后,還可以加上不同的stability flag,例如2.7.*@beta??梢允褂玫膄lag有:dev、alpha、beta、RC、stable

指定好版本后,執(zhí)行composer install,就會根據(jù)指定的版本規(guī)則,安裝最新版本的套件。

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

* composer.lock

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

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

* vendor目錄

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

* vendor/autoload.php

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

=====

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

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

向AI問一下細節(jié)

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

AI