Composer使用

是什麼

若是你知道yumapt-getnpmbower等命令中的一種或者多種,那麼,你也能很快知道composer是什麼了。沒錯,它就是PHP裏快速安裝類庫的。平時,咱們安裝一個PHP類庫,須要搜索->下載;使用composer,咱們只要知道包名,直接composer insatll就能夠了。php

PHP 語言自己就帶有強大的網絡功能、文件管理功能和豐富的系統 API,Composer 也只是一段 PHP 腳本而已。html

引自Composer中文網的描述:laravel

是 PHP 用來管理依賴(dependency)關係的工具。你能夠在本身的項目中聲明所依賴的外部工具庫(libraries),Composer 會幫你安裝這些依賴的庫文件。git

做用

安裝PHP包、依賴庫。github

示例:npm

$ composer require monolog/monolog

這是在安裝monolog庫。json

$ composer create-project laravel/laravel learnlaravel5 5.0.22

這是在安裝laravel框架並建立項目。segmentfault

YII框架也是經過composer安裝的。windows

爲何用composer

經過過composer,咱們可使用大量的第三方庫,而無需本身造輪子。優秀項目示例:安全

  • overtrue/wechat 讓微信開發更簡單!
  • catfan/medoo 一款ORM框架
  • monolog/monolog 日誌記錄
  • hprose/hprose RPC框架

你能夠在 https://packagist.org/ 找到你須要的庫。甚至你能夠提交本身寫的優秀的庫到該平臺裏供你們使用。

若是不會composer,流行的laravelyii框架安裝都成爲問題,更不用談學習了;不少優秀的輪子你沒法使用。因此,推薦phper必須學會composer。

安裝Composer

先下載composer.phar:

wget https://mirrors.aliyun.com/composer/composer.phar

其它下載源:

  • 中國全量鏡像站: https://install.phpcomposer.com/
  • 阿里雲:https://mirrors.aliyun.com/composer/
  • 安暢網絡鏡像:https://php.cnpkg.org
  • 交通大學鏡像(非全量):https://packagist.mirrors.sjtug.sjtu.edu.cn/

各系統按照下面的操做執行安裝:

Linux/Mac:

mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer

Windows:
下載後放到php安裝位置裏,而後新建文件:

composer.bat #windows用
composer #git-bash用

composer.bat

@ECHO OFF
php "%~dp0composer.phar" %*

composer

#!/bin/sh

dir=$(d=$(dirname "$0"); cd "$d" && pwd)

# see if we are running in cygwin by checking for cygpath program
if command -v 'cygpath' >/dev/null 2>&1; then
    
    # cygwin paths start with /cygdrive/ which will break windows PHP,
    # so we need to translate the dir path to windows format. However
    # we could be using cygwin PHP which does not require this, so we
    # test if the path to PHP starts with /cygdrive/ rather than /usr/bin.
    if [[ $(which php) == /cygdrive/* ]]; then
        dir=$(cygpath -m $dir);
    fi
fi

dir=$(echo $dir | sed 's/ /\ /g')
php "${dir}/composer.phar" $*

若是上述連接下載不了,請使用: http://pan.baidu.com/s/1gfmSIbD 密碼: f4vr 。

我還專門建了github倉庫:https://github.com/52fhy/composer。

Linux須要給composer可執行權限。以後就可使用composer了:

$ composer -V
 Composer version 1.9-dev (1.9-dev+e022c073706769d0486de96de0f98719cd9950b5) 2019-06-27 12:06:49

生成一個空的Composer項目

在合適的地方新建一個文件夾,命名爲 MFFC(My First Framework based on Composer),在文件夾下新建文件 composer.json

{
  "require": {
  }
}

命令行切換到 MFFC 目錄下,運行:

composer update

就會在該目錄下生成一個vendor文件夾。之後全部的第三擴展包都會安裝在這裏。

裏面的代碼你們能夠看看。

安裝擴展包

如下以monolog爲例:

聲明依賴

在項目目錄下建立一個composer.json文件,指明依賴,好比,你的項目依賴 monolog:

{
    "require": {
        "monolog/monolog": "1.2.*"
    }
}

若是不須要使用https,能夠這麼寫,以解決有時候由於https形成的問題:

{
    "require": {
        "monolog/monolog": "1.2.*"
    },
    "config": {
        "secure-http": false
    }
}

安裝依賴

安裝依賴很是簡單,只需在項目目錄下運行:

composer install

若是沒有全局安裝的話,則運行:

php composer.phar install

更新所有的包(謹慎使用):

composer update

注意:使用composer install或者composer update命令將會更新全部的擴展包,項目中使用需謹慎!!!

若只安裝指定的包推薦在命令行使用:

composer require monolog/monolog

進行安裝。

若是須要指定版本:

composer require "monolog/monolog:1.2.*"

更新某個包:

composer update monolog/monolog

移除某個包:

composer remove monolog/monolog

若是手動更新了composer.json須要更新autoload:

composer dump-autoload

包版本約束

精確版本:示例: 1.0.2

範圍:使用比較操做符你能夠指定包的範圍。這些操做符包括:>,>=,<,<=,!=。你能夠定義多個範圍,使用空格 或者逗號,表示邏輯上的與,使用雙豎線||表示邏輯上的或。其中與的優先級會大於或。示例:

>=1.0
>=1.0 <2.0
>=1.0 <1.1 || >=1.2

範圍(使用連字符):
例子:1.0 - 2.0,等同於>=1.0.0 <2.1(2.0至關於2.0.*)。

通配符:可使用通配符去定義版本。1.0.*至關於>=1.0 <1.1
例子:1.0.*

下一個重要版本操做符:使用波浪號~。示例:
~1.2至關於>=1.2 <2.0.0,而~1.2.3至關於>=1.2.3 <1.3.0

折音號^:例如,^1.2.3至關於>=1.2.3 <2.0.0,由於在2.0版本前的版本應該都沒有兼容性的問題。而對於1.0以前的版本,這種約束方式也考慮到了安全問題,例如^0.3會被看成>=0.3.0 <0.4.0對待。

自動加載

Composer提供了自動加載的特性,只需在你的代碼的初始化部分中加入下面一行:

require 'vendor/autoload.php';

詳細示例

{
    "require": {
        "php": ">=5.4.0",
        "illuminate/database": "*",
        "monolog/monolog": "1.2.*"
    },
    "config": {
        "secure-http": false
    },
    "autoload": {
        "classmap": [
          "app/models"
        ],
        "files": [
            "vendor/yjc/src/Alipay/autoload.php"
            ],
        "psr-4": {
            "Yjc\\Sms\\": "vendor/yjc/src/Sms"
        }
    }
}

autoload部分指定自動加載的文件夾,每次裏面的文件有新增,使用composer dump-autoload便可。

詳見:http://docs.phpcomposer.com/03-cli.html#dump-autoload

命令彙總

composer list  列出全部可用的命令
composer init   初始化composer.json文件(就不勞咱們本身費力建立啦),會要求輸入一些信息來描述咱們當前的項目,還會要求輸入依賴包
composer install  讀取composer.json內容,解析依賴關係,安裝依賴包到vendor目錄下
composer update   更新最新的依賴關係到compsoer.lock文件,解析最新的依賴關係而且寫入composer.lock文件
composer search packagename 搜索包,packagename替換爲你想查找的包名稱
composer require packagename 添加對packagename的依賴,packagename可修改成你想要的包名稱
composer show packagename
composer self-update 更新 composer.phar文件自身
composer dump-autoload --optimize 優化一下自動加載

composer command --help 以上全部命令均可以添加 --help選項查看幫助信息

更多可用命令,能夠在命令行輸入composer進行查看。

模塊倉庫

packagist.org是Composer的倉庫,不少著名的PHP庫都能在其中找到。你也能夠提交你本身的做品

當你安裝完Composer後,使用時,卻發現不能下載包,或者很慢,這是一個『衆所周知』的緣由。

因此,咱們使用國內的鏡像站點進行代替,經常使用方法有兩種:

一、修改全局配置:全局配置的文件通常放在C:\Users\XXX\AppData\Roaming\Composer\config.json,例如C:\Users\YJC\AppData\Roaming\Composer\config.json
(這裏以windows路徑爲例)。能夠經過命令composer config -l查看配置,其中[home]爲配置所在目錄。config.json即爲配置文件。

{
    "config": {

    },
    "repositories": [
        {"type": "composer", "url": "http://pkg.phpcomposer.com/repo/packagist/"},
        {"packagist": false}
    ]
}

或者命令行直接修改:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

二、修改當前配置:即項目當前的composer.json文件;

{
  "require": {
    "noahbuscher/macaw": "dev-master"
  },
  "repositories": [
        {   
            "packagist": false
        },  
        {   
            "type": "composer", 
            "url": "http://packagist.cn"
        }   
    ]
}

三、常見鏡像地址:
https://packagist.org 國外的
http://packagist.phpcomposer.com 中國全量鏡像

推薦的包

overtrue/wechat 讓微信開發更簡單!
thenbsp/wechat
catfan/medoo
illuminate/database
psr/log
monolog/monolog
symfony/event-dispatcher
phpunit/phpunit
phpunit/php-timer
michelf/php-markdown markdown 文檔解析
intervention/image 圖片處理
mytharcher/alipay-php-sdk

更多查看:https://packagist.org/explore/popular

發佈本身的包

大概步驟以下:

在github上建立一個項目(項目名稱能夠隨意)
編寫composer.json
copy代碼文件並修改命名空間
在https://packagist.org/上遞交本身的包
設置github的hook

編寫composer.json
先看一個示例:

{
    "name": "jenner/message_queue",
    "description": "php message queue wrapper",
    "license": "MIT",
    "keywords": ["message queue"],
    "version": "1.0.0",
    "authors": [
        {
            "name": "Jenner",
            "email": "hypxm@qq.com"
        }
    ],
    "require": {
        "php": ">=5.3.0"
    },
 
    "autoload": {
        "psr-0": {
            "Jenner\\Zebra\\MessageQueue": "src/"
        }
    }
}

須要注意的幾個字段說明以下:

name:包名稱,遞交時packagist會檢測報名字是否合法。必須是一個/分隔的字符串。當別人引入你的包時,vendor下會自動建立這個目錄。例如org/package包,則會在vender下建立org/package目錄。

autoload:包的加載方式,具體加載方式能夠參考composer中文網說明。這裏使用的是psr-0標準加載方式。composer會在src目錄下根據命名空間執行自動加載。

PSR規範

Framework Interoperability Group(框架可互用性小組),簡稱 FIG,成立於 2009 年。FIG 最初由幾位知名 PHP 框架開發者發起,在吸納了許多優秀的大腦和強健的體魄後,提出了 PSR-0 到 PSR-4 五套 PHP 非官方規範:

  1. PSR-0 (Autoloading Standard) 自動加載標準
  2. PSR-1 (Basic Coding Standard) 基礎編碼標準
  3. PSR-2 (Coding Style Guide) 編碼風格嚮導
  4. PSR-3 (Logger Interface) 日誌接口
  5. PSR-4 (Improved Autoloading) 自動加載優化標準

以後,在此標準之上,Composer 橫空出世!Composer 利用 PSR-0 和 PSR-4 以及 PHP5.3 的命名空間構造了一個繁榮的 PHP 生態系統。Composer 相似著名的 npm 和 RubyGems,給海量 PHP 包提供了一個異常方便的協做通道,Composer Hub 地址:https://packagist.org/。Composer 中文網站:http://www.phpcomposer.com/。

目前 PHP 界風頭正勁的 Laravel 和 Symfony 均直接基於 Composer,你們耳熟能詳著名框架 CI 和 Yii 的正開發版本 CodeIgniter 3 和 Yii 2 也都基於 Composer(更新:北京時間2014年10月13日 Yii 2 已經發布)。Composer 就是 PHP 框架的將來,有了它,讓 CI 的路由和 Laravel 的 Eloquent ORM 協做就會變的很是簡單。

常見問題

一、Windows下出現:Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
進入C:\Users\YJC\AppData\Roaming\Composer目錄,刪除vendor目錄。

Composer鏡像加速

設置鏡像

請儘量用比較新的 Composer 版本。

使用 Composer 鏡像加速有兩種選項:

  • 選項一:全局配置,這樣全部項目都能惠及(推薦);
  • 選項二:單獨項目配置;

選項1、全局配置(推薦)

$ composer config -g repo.packagist composer https://packagist.laravel-china.org

選項2、單獨使用

若是僅限當前工程使用鏡像,去掉 -g 便可,以下:

$ composer config repo.packagist composer https://packagist.laravel-china.org

解除鏡像

若是須要解除鏡像並恢復到 packagist 官方源,請執行如下命令:

composer config -g --unset repos.packagist

執行以後,composer 會利用默認值(也就是官方源)重置源地址。

鏡像源列表

  • Packagist / Composer 中國全量鏡像
    https://pkg.phpcomposer.com/#how-to-install-composer

  • zencodex/composer-mirror: Composer
    https://github.com/zencodex/composer-mirror

  • PHP Composer
    https://mirrors.cloud.tencent.com/composer/

參考

一、利用 Composer 一步一步構建本身的 PHP 框架(一)——基礎準備 - 歲寒
https://lvwenhan.com/php/405.html

二、PHP 開發者該知道的 5 個 Composer 小技巧 - 新聞 - SegmentFault
https://segmentfault.com/a/1190000000355928

三、Composer 中文網
http://www.phpcomposer.com/

四、Packagist / Composer 中國全量鏡像
http://pkg.phpcomposer.com/

五、Composer安裝
https://getcomposer.org/download/

六、composer之建立本身的包 - 始終不夠
http://www.huyanping.cn/composer%e4%b9%8b%e5%88%9b%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84%e5%8c%85/

七、php - 請各位分享或推薦一下composer裏面好用的包 - SegmentFault
https://segmentfault.com/q/1010000000484379

八、給 CI 插上翅膀——在 CodeIgniter 2 中使用 Laravel Eloquent ORM - 歲寒
https://lvwenhan.com/php/414.html

九、Composer進階使用 —— 經常使用命令和版本約束 - icyfire - SegmentFault
https://segmentfault.com/a/1190000005898222

十、Composer 國內加速:可用鏡像列表 | Composer 技術論壇 https://learnku.com/composer/wikis/30594

相關文章
相關標籤/搜索