我的筆記------composer

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框架並建立項目。windows

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

爲何用composer

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

  • 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,建議下載最新版本的:
Latest Snapshot
1.2.0 (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 #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
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
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便可。

詳見: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目錄下根據命名空間執行自動加載。

背景

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目錄。

相關文章
相關標籤/搜索