composer php依賴管理工具


 

#composer是什么
Composer 是 PHP 的一個依賴管理工具。它允許你申明項目所依賴的代碼庫,它會在你的項目中為你安裝他們。
composer出現之前我們php項目依賴管理大部分都是手動管理,(當然也可能會用到pear,pear是全局安裝的)。
 
#Composer 解決了那些問題
a) 你有一個項目依賴於若干個庫。
b) 其中一些庫依賴於其他庫。
c) 你聲明你所依賴的東西。
d) Composer 會找出哪個版本的包需要安裝,並安裝它們(將它們下載到你的項目中)。

 


#系統要求
windows,linux,osx
php5.3.2+
git,svn,hg (取決於依賴包用的版本控制)
 
#安裝
windows:
      https://getcomposer.org/Composer-Setup.exe  下載安裝;
     設置環境變量,任何目錄下可直接用  composer  命令;
 
*inux
     curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
     mv composer.phar /usr/local/bin/composer
     ( composer.phar 是composer的二進制執行程序,是一個phar包 )
 
MAC
     推薦brew安裝
     brew update
     brew tap josegonzalez/homebrew-php
     brew tap homebrew/versions
     brew install php55-intl
     brew install josegonzalez/php/composer
 
安裝完成之后,-v選項查看詳情

 

#使用
composer依賴管理通過  composer.json 文件配置依賴關系。
 
json結構,最重要的key是 require  定義依賴關系;
{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}
結構是     包名 :版本
包名格式:供應商/包名  這種結構的好處是運行多個人開發相同的包名,通過供應商名稱區分
版本:

~1.2 理解 >= 1.2, <2.0    最后一個點后面的可以變   ~1.2.3   >=1.2.3, < 1.3

 
依賴關系配置好之后: composer install  會安裝包到  vendor/包名 目錄下    vendor目錄推薦放在版本控制外(.gitignore)   如下:

 

同時會寫一個 composer.lock 文件,里面詳細記錄安裝的版本信息,composer.lock 和  composer.json這兩個文件必須加入版本控制中,這樣別人初始化項目的時候就會讀取lock文件安裝指定的版本,即使依賴包有新版本發布,降低了部署風險。(install程序首先檢查有沒有lock文件)

 

composer install 運行過程:

 

由於有牆,這2個站訪問不是很穩定,即使能訪問到速度也很慢,強烈推薦  composer中國全量鏡像  項目composer.json中加入如下配置:
"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }
}
 詳細參考官網: http://pkg.phpcomposer.com/
 
更新依賴包:
      php composer.phar update
只跟新一個包
      php composer.phar update monolog/monolog [...]
 
#自動加載
composer為我們做好了自動加載的操作,項目中我們只需要引入即可:
     require 'vendor/autoload.php';
也可以定義自己的autoload:
     "autoload": {
            "classmap": [
                 "database"
            ],
            "psr-4": {
                 "App\\": "app/"
            }
     }
注冊一個psr-4的autoload到App的命名空間,App命名空間映射到目錄app 和vendor同級,修改autoload后必須重新運行
composer install  以便重新生成autoload.php
 
composer dumpautoload

# 包
只要一個文件夾里包含 composer.json 它就是一個包,如果定義了一個require這是一個依賴於其他包的包。
項目本身就是一個包  只是沒有名字  通過 composer.json 中的 name 來定義 
{
    "name": "acme/hello-world",
    "require": {
        "monolog/monolog": "1.0.*"
    }
}
#平台軟件包
不是由composer安裝的包視為平台軟件包,如php本身  通過下面命令查看
 
輸出結果中出現的限制都可以用於定義依賴
 

# 使用composer管理項目
背景:團隊里有自己的框架,庫。現在需要做一個新項目。這時候可以使用composer管理
 
步驟一
     把公共的框架和庫做成一個composer包, push到git上(svn也行)能訪問到就行
       
步驟二
    在我們新項目的composer.json中,定義依賴
      
步驟三
    執行  composer  install 這個時候項目依賴就會自動安裝。
 
最終目錄結構如下:
 
如果打算開源某個公共庫,可以發布到 composer的packageist   地址: https://packagist.org/    提交項目就行;
 

# yii2 分析
目前主流php框架新版本都開始composer,如 yii2,laravel等;
{
    "name": "yiisoft/yii2-app-basic",  // 包名稱  供應商/項目名  必須
    "description": "Yii 2 Basic Project Template", // 包描述  最長一行  對於要發布的包是必須字段
    "keywords": ["yii2", "framework", "basic", "project template"], //該包相關的關鍵詞的數組。這些可用於搜索和過濾  可選
    "homepage": "http://www.yiiframework.com/",  // 該項目網站的 URL 地址  可選
    "type": "project",  // 包的安裝類型,默認為 library 簡單復制到vendor中。 project這表示當前包是一個項目,而不是一個庫
    "license": "BSD-3-Clause", // 許可協議
    "support": {  // 獲取項目支持的向相關信息對象
        "issues": "https://github.com/yiisoft/yii2/issues?state=open",
        "forum": "http://www.yiiframework.com/forum/",
        "wiki": "http://www.yiiframework.com/wiki/",
        "irc": "irc://irc.freenode.net/yii",
        "source": "https://github.com/yiisoft/yii2"
    },
    "minimum-stability": "stable", // 這定義了通過穩定性過濾包的默認行為
    "require": {
        "php": ">=5.4.0",
        "yiisoft/yii2": ">=2.0.5",
        "yiisoft/yii2-bootstrap": "*",
        "yiisoft/yii2-swiftmailer": "*"
    },
    "require-dev": { // 這個列表是為開發或測試等目的,額外列出的依賴
        "yiisoft/yii2-codeception": "*",
        "yiisoft/yii2-debug": "*",
        "yiisoft/yii2-gii": "*",
        "yiisoft/yii2-faker": "*"
    },
    "config": { // 僅用於項目
        "process-timeout": 1800 // 處理進程結束時間
    },
    "scripts": { // Composer 允許你在安裝過程中的各個階段掛接腳本
        "post-create-project-cmd": [
            "yii\\composer\\Installer::postCreateProject"
        ]
    },
    "extra": { // 任意的,供 scripts 使用的額外數據
        "yii\\composer\\Installer::postCreateProject": {
            "setPermission": [
                {
                    "runtime": "0777",
                    "web/assets": "0777",
                    "yii": "0755"
                }
            ],
            "generateCookieValidationKey": [
                "config/web.php"
            ]
        },
        "asset-installer-paths": {
            "npm-asset-library": "vendor/npm",
            "bower-asset-library": "vendor/bower"
        }
    }
}

#常用命令
composer init  以交互的方式創建 composer.json
 
composer install  處理依賴關系,安裝到vendor下
 
composer update 獲取最新版本,並更新lock文件
 
composer search 搜索依賴
 
composer validate 有效性檢查
 

更多信息參考官方手冊。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM