1. 程式人生 > >PHP中composer的安裝和使用

PHP中composer的安裝和使用

是什麼

如果你知道yumapt-getnpmbower等命令中的一種或者多種,那麼,你也能很快知道composer是什麼了。沒錯,它就是PHP裡快速安裝類庫的。平時,我們安裝一個PHP類庫,需要搜尋->下載;使用composer,我們只要知道包名,直接composer insatll就可以了。

PHP 語言本身就帶有強大的網路功能、檔案管理功能和豐富的系統 API,Composer 也只是一段 PHP 指令碼而已。

是 PHP 用來管理依賴(dependency)關係的工具。你可以在自己的專案中宣告所依賴的外部工具庫(libraries),Composer 會幫你安裝這些依賴的庫檔案。

作用

安裝PHP包、依賴庫。

示例:

$ composer require monolog/monolog

這是在安裝monolog庫。

$ composer create-project laravel/laravel learnlaravel5 5.0.22

這是在安裝laravel框架並建立專案。

YII框架也是通過composer安裝的。

為什麼用composer

通過過composer,我們可以使用大量的第三方庫,而無需自己造輪子。優秀專案示例:

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

你可以在 https://packagist.org/ 找到你需要的庫。甚至你可以提交自己寫的優秀的庫到該平臺裡供大家使用。

如果不會composer,流行的laravelyii框架安裝都成為問題,更不用談學習了;很多優秀的輪子你無法使用。所以,推薦phper必須學會composer。

安裝Composer

首先得安裝Composer命令列工具。由於國內網際網路某種神祕的力量讓Composer變得越來越不穩定,可能導致安裝不了。如果無法按步驟安裝,本小節最後我會提供國內下載地址。

指令碼自動安裝

下面是安裝命令(來自https://getcomposer.org/download/):

php -r "readfile('https://getcomposer.org/installer');" > composer-setup.php

php -r "if
(hash('SHA384', file_get_contents('composer-setup.php')) === 'fd26ce67e3b237fffd5e5544b45b0d92c41a4afe3e3f778e942e43ce6be197b9cdc7c251dcde6e2a52297ea269370680') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); }" php composer-setup.php php -r "unlink('composer-setup.php');"

按順序執行即可。安裝好後提示:

All settings correct for using Composer
Downloading...

Composer successfully installed to: /root/composer/composer.phar
Use it: php composer.phar

操作執行結束,會在當前目錄下生成composer.phar檔案。

在Linux裡,composer.phar是可執行程式。

例如,我們可以使用php composer.phar update執行更新操作。

全域性安裝:

mv composer.phar /usr/local/bin/composer

之後,就可以直接使用composer install安裝包了。不過通常情況下只需將composer.phar的位置加入到PATH就可以,不一定要全域性安裝。

手動安裝

首先去https://getcomposer.org/download/下載https://getcomposer.org/download/1.2.0/composer.phar,建議下載最新版本的:
(2016-07-18)
1.2.0-RC (2016-07-04)
1.1.3 (2016-06-26)
1.1.2 (2016-05-31)

下載後放到php安裝位置裡,然後

Linux:

cp composer.phar /usr/bin/composer
chmod +x /usr/bin/composer

Windows:
新建:

composer.bat #windowscomposer #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" $*

Linux需要給composer可執行許可權。之後就可以使用composer了:

$ composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.2.0 2016-07-19 01:28:52

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display this help message
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi                     Force ANSI output
      --no-ansi                  Disable ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
      --no-plugins               Whether to disable plugins.
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  about           Short information about Composer
  archive         Create an archive of this composer package
  browse          Opens the package's repository URL or homepage in your browser.
  clear-cache     Clears composer's internal package cache.
  clearcache      Clears composer's internal package cache.
  config          Set config options
  create-project  Create new project from a package into given directory.
  depends         Shows which packages cause the given package to be installed
  diagnose        Diagnoses the system to identify common errors.
  dump-autoload   Dumps the autoloader
  dumpautoload    Dumps the autoloader
  exec            Execute a vendored binary/script
  global          Allows running commands in the global composer dir ($COMPOSER_HOME).
  help            Displays help for a command
  home            Opens the package's repository URL or homepage in your browser.
  info            Show information about packages
  init            Creates a basic composer.json file in current directory.
  install         Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
  licenses        Show information about licenses of dependencies
  list            Lists commands
  outdated        Shows a list of installed packages that have updates available, including their latest version.
  prohibits       Shows which packages prevent the given package from being installed
  remove          Removes a package from the require or require-dev
  require         Adds required packages to your composer.json and installs them
  run-script      Run the scripts defined in composer.json.
  search          Search for packages
  self-update     Updates composer.phar to the latest version.
  selfupdate      Updates composer.phar to the latest version.
  show            Show information about packages
  status          Show a list of locally modified packages
  suggests        Show package suggestions
  update          Updates your dependencies to the latest version according to composer.json, and updates the composer.lock file.
  validate        Validates a composer.json and composer.lock
  why             Shows which packages cause the given package to be installed
  why-not         Shows which packages prevent the given package from being installed

生成一個空的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即可。

命令彙總

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後,使用時,卻發現不能下載包,或者很慢,這是一個『眾所周知』的原因。

所以,我們使用國內的映象站點進行代替,常用方法有兩種:

1、修改全域性配置:全域性配置的檔案一般放在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

2、修改當前配置:即專案當前的composer.json檔案;

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

推薦的包

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

釋出自己的包

大概步驟如下:

在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": "[email protected]"
        }
    ],
    "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目錄下根據名稱空間執行自動載入。

背景

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 協作就會變的非常簡單。

常見問題

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

有用的資源