composer

首先介紹php命令行:https://www.cnblogs.com/myjavawork/articles/1869205.htmlphp

1.支持命令行必須開啓openssl擴展html

2.在windows環境下,儘可能使用雙引號, 在linux環境下則儘可能使用單引號來完成。java

直接運行文件:linux

php -f "文件名"laravel

如:php -f "index.php"git

直接運行php代碼:程序員

php -r "php代碼"github

如:php -r "var_dump(phpinfo());"正則表達式

 

composer的安裝:thinkphp

1最簡單方法下載Composer-Setup.exe 安裝並配置path變量(他會自動找到php.exe的目錄)

2命令行安裝:

windows:

一、拷貝遠程資源的文件到當前文件夾下文件的名字叫composer-setup.php(即下載composer-setup.php文件)  注意安裝前選好目錄哦
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
或者:
php -r "readfile('https://getcomposer.org/installer');" | php

二、檢查這個文件的完整性

php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

三、運行這個文件  這是用命令行安裝composer的關鍵一步

php composer-setup.php
或者指定安裝目錄:
php composer-setup.php --install-dir=bin

四、刪除這個文件

php -r "unlink('composer-setup.php');"

composer 自身的更新:composer self-update

 

phpstudy 配置全局的composer   或者這篇博文

linux系列: 和windows安裝步驟同樣的。。。

下載composer-setup.php文件

當前目錄:curl -sS https://getcomposer.org/installer | php

指定目錄:curl -sS https://getcomposer.org/installer | php -- --install-dir=bin

或者:

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

配置號後用composer -v查當作功安裝否

php composer 開發本身的包

 

使用:

命令行進入目標文件夾好比咱們要在網站某個項目下安裝第三方插件【也能夠叫組件】(D:\xampp\htdocs\moodle)

咱們須要在moodle的項目文件下下配置建立一個composer.json文件配置以下:

{
  "require": {
    "guzzlehttp/guzzle": "4.2.*",//前面是組件名,後面是組件版本          組件1
    "league/csv": "6.0.*",     //php組件不少,組件名和版本均可以從https://packagist.org/得到       組件2
    "spatie/string": "1.8.*"       //組件3
}

安裝和更新項目的依賴包與組件
咱們在命令行進入當前目錄而且配置號上面的composer.json後,在命令行輸入composer install 就會下載組件啦 (composer update 是更新組件)
ps:安裝時的選擇:composer install - 若有 composer.lock 文件,直接安裝,不然從 composer.json 安裝最新擴展包和依賴;
composer update - 從 composer.json 安裝最新擴展包和依賴; composer update vendor/package   - 從 composer.json 或者對應包的配置,並更新到最新; 線上項目慎用!!!他講會更新全部的組件啊!!若是換到最新的不穩定那就GG了 composer require new/package     - 添加安裝 new/package, 能夠指定版本,如: composer require new/package ~2.5.
不編輯的狀況下安裝庫composer update foo/bar -只想更新某個特定的庫,不想更新它的全部依賴,很簡單:
composer require "foo/bar:1.0.0" -composer.json

使用
回車成功後就能夠在moodle文件下下生成一個vendor文件夾而且在vendor文件夾下已經下載好了上面配置的三個組件而且還有一個autoload.php文件專門在項目引用這些組件的
引用這些文件必須先加載autoload.php這個文件,而後實例化每一個要使用的組件而後調用他們的方法就好了:
require 'vendor/autoload.php';     //引入自動加載文件
$client=new \GuzzleHttp\Client();  //建立GuzzleHttp組件的對象
$httpResponse=$client->options();  //調用方法
切換國內鏡像
默認的組件庫時國外的服務器,萬惡的網絡你懂的咱們須要切換到國內的鏡像服務器
目前國內的鏡像有:
https://packagist.laravel-china.org
https://packagist.phpcomposer.com
全局配置
composer config -g repo.packagist composer https://packagist.phpcomposer.com
或者直接修改全局配置文件
步驟:
1查看composer的全局配置文件:composer config -l -g
最後一行的[home] C:/Users/lichihua/AppData/Roaming/Composer就是配置文件的路徑 找到這個路徑下面的config.json文件(或者在項目).將內容手動改成:composer.json下加入這段內容
    {
            "config": {

            },
            "repositories": [
                {"type": "composer", "url": "http://pkg.phpcomposer.com/repo/packagist/"},
                {"packagist": false}
            ]
     }
將url裏的地址替換爲中國的地址如:https://packagist.phpcomposer.com

固然也能夠在進入當前項目的目錄使用composer config repo.packagist composer https://packagist.phpcomposer.com 命令
composer config repo.packagist composer https://packagist.phpcomposer.com
 文件下自動生成:他也會自動在當前項目的composer.json
"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }
}
 

composer.json 中的各個屬性字段詳解

重要:

requires字段:

    定義要下載的依賴包

  "require": {
    "php": ">=5.6.4",
    "chumper/zipper": "^1.0",
    "doctrine/dbal": "^2.5",
    "fideloper/proxy": "^3.3",
    "fzaninotto/faker": "~1.4",
    "guzzlehttp/guzzle": "^6.3",
    "imagine/imagine": "^0.7.1",
    "laravel/framework": "5.4.*",
    "laravel/socialite": "^3.0",
    "laravel/tinker": "~1.0",
    "omnipay/paypal": "^2.6",
    "omnipay/stripe": "^2.4",
    "pda/pheanstalk": "^3.1",
    "sentry/sentry-laravel": "^0.8.0",
    "symfony/event-dispatcher": "^2.8",
    "vebto-server": "dev-master"
  },
View Code

autoload字段:  

當咱們想讓composer幫咱們自動加載咱們本身定義的類的時候

"autoload": {
    "psr-4": {
        "AppBundle\\": "src/AppBundle"
    },
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},

而後執行composer update  執行成功就能自動加載了

注意:每次更新完composer.json後,必須執行composer update後纔會生效。

PSR-0自動加載                  此規範已經廢掉了可是composer還兼容此規範
PSR-1基本代碼規範 
PSR-2代碼樣式                  算是對PSR-1的補充吧
PSR-3日誌接口 
PSR-4 自動加載

更多的PSR規範...   及例子 和筆記

命名空間的申明及使用

在任何一個沒有聲明命名空間的文件中,使用的命名空間都是相對於根命名空間\的,好比是使用Exception就不須要加反斜槓。
若是此文件用namespace指定了當前的命名空間,在使用Exception的時候若是不加反斜槓就是相對於當前的命名空間。
可是申明的時候語法規則默認爲你加了一個反斜槓,後面的被認爲是一個常量。因此定義命名空間不能以\開頭

限定名稱、非限定名稱、徹底限定名稱

其實能夠把這三種名稱類比爲文件名(例如 comment.php)、相對路徑名(例如 ./article/comment.php)、絕對路徑名(例如 /blog/article/comment.php),這樣可能會更容易理解

//建立空間Blog

namespace Blog;

class Comment { }

//非限定名稱,表示當前Blog空間

//這個調用將被解析成 Blog\Comment();

$blog_comment = new Comment();

//限定名稱,表示相對於Blog空間

//這個調用將被解析成 Blog\Article\Comment();

$article_comment = new Article\Comment(); //類前面沒有反斜杆\

//徹底限定名稱,表示絕對於Blog空間

//這個調用將被解析成 Blog\Comment();

$article_comment = new \Blog\Comment(); //類前面有反斜杆\

//徹底限定名稱,表示絕對於Blog空間

//這個調用將被解析成 Blog\Article\Comment();

$article_comment = new \Blog\Article\Comment(); //類前面有反斜杆\
View Code

自動加載說明:

注意:

一、composer.json文件是不能包含任何註釋的,會報錯   composer加載流程

二、聲明的命名空間、文件夾與類文件及類名大小寫要一致,不然在linux會報錯!!

三、下載的依賴包直接可使用(如include 「vendor/autoload.php」;new PHPExcel();) ,不須要咱們在json裏定義autoload 自動加載,當咱們須要自動加載自定義類的時候autoload就排上用場了

conposer自動加載有四種方式:PSR-0、  PSR-四、 file、 classmap

{
    "name" : "dash/test",
    "require": {
        "swiftmailer/swiftmailer": "5.*.*@dev",
        "phpoffice/phpexcel": "dev-master"
    },
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://packagist.phpcomposer.com"
        }
    },
    #自動加載格式:  root命名空間:起始路徑      命名空間的申明應該以\\結束 若是不加\\Foo能夠與FooBar匹配   加上Foo\\ 和 FooBar\\ 就會被區分開啦
    "autoload":{
        "psr-0":{
            "church\\":"./src/",       # 簡單理解將./src路徑替換爲church 因此 src裏的類文件必須有namespace church     
            #use church\testClass, 那就對應src/church/testClass.php.
            #use church\test\testClass, 那就對應src/church/test/testClass.php
            "Test\\" :"core/",         #composer update後 ./vender/composer/autoload_psr4.php的 數組裏會多出'Test\\' => array($baseDir . '/core'),
            "UniqueGlobalClass": ""    # 這個類的php源文件也位於包的根目錄    
        },
        "psr-4":{
            "church\\":"./src/",
            # use church\TestClass, 那就對應src/testClass.php.
            # use church\Test\TestClass, 那就對應src/test/testClass.php
            #
            "Dash\\":["extra/","library/"],  #多個目錄中一個相同的(命名空間)前綴 psr-0 也適用
            "":"any/"                        #任何命名空間(即實例化類時其餘地方未定義,那麼就會進入any查找)  設置一個目錄做爲任何命名空間的備用目錄psr-0也適用
        },
        "files":[ 
            "src/MyLibrary/functions.php" #通常用來自動加載函數、配置等非類文件 
        ],

        #當Composer開始安裝和更新擴展的時候,會根據composer.json裏的這個autoload告訴的方式classmap,
        #來遍歷src、lib目錄而後將裏面的類文件和其路徑一一對應,存放到vendor/composer/autoload_classmap.php內
        #src/文件下必須有文件而且定義了類纔會被加載到classmap
        "classmap":[
            "src/", 
            "lib/"
        ]
    }    
}

 

目錄及文件結構

any
classmap
  |--somethingClassmap.php      
core
  |--ClassTestXXX.php
  |--Test
    |--ClassTest.php
    |--A
      |--B
        |--C
          |-CustomClass.php
index
  |--index.php

lib
  |--somethingLib.php

library
  |--A
   |--Test.php
src
  |--Something.php
  |--somthingSrc.php
  |--A
    |--B
      |--C
        |--CustomeClass.php
vendor
composer.json


#autoload_classmap.php
return array(
    'A' => $baseDir . '/src/somthingSrc.php',                                       //class A{}|$a=new A();     
    'A\\somethingLib' => $baseDir . '/lib/somethingLib.php',                        //namespace A;  class somethingLib{}|$b=new \A\somethingLib();
    'Something' => $baseDir . '/src/Something.php',                                 //class Something{}|$c=new Something();
    'classmap\\somethingClassmap' => $baseDir . '/classmap/somethingClassmap.php',  //namespace classmap; class somethingClassmap{}|$d=new \classmap\somethingClassmap();
);

#autoload_files.php
return array(
    '2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php',// 依賴包裏的
    '504600fb8804f6fa5cfe80df6c85f147' => $baseDir . '/src/MyLibrary/functions.php',   //有這個文件的話就直接加載了
);



#autoload_namespaces.php
return array(
    'church\\' => array($baseDir . '/src'),
    'UniqueGlobalClass' => array($baseDir . '/'),
    'Test\\' => array($baseDir . '/core'),
    'PHPExcel' => array($vendorDir . '/phpoffice/phpexcel/Classes'),
);
#new \church\XXOO(); 對應文件/src/church\XXOO.php的XXOO類 且聲明 namespace church;    class XXOO{}
#new \Test\ClassTest();對應文件 \core\Test\ClassTest.php的ClassTest類 且類中申明 namespace Test;
#new Test\A\B\C\CustomClass(); 對應文件\core\Test\A\B\C\CustomClass.php的CustomCLass類 且申明 namespace Test\A\B\C;



#autoload_psr4.php
return array(
    'church\\' => array($baseDir . '/src'),
    'Dash\\' => array($baseDir . '/extra', $baseDir . '/library'),
    '' => array($baseDir . '/any'),
);
#/src/church.php 的 namespace church;class XXOO{}
#調用文件(必須有include "../vendor/autoload.php"; 這裏的都將省略):  
#index.php(未定義命名空間)   new \church\XXOO();或者new church\XXOO();均可以
#index2.php(定義了命名空間)  必須new\church\XXOO();
#new Dash\A\B\C\CustomClass(); 對應文件\library(或者extra)\A\B\C\CustomClass.php的CustomCLass類 且申明 namespace Dash\A\B\C;
#new A\Test();  對應文件\any\A\Test.php 且申明namespace A;
View Code

 

總結:

PSR-0與PSR-4自動加載格式:  root命名空間:起始路徑
"psr-0|4":{
    "root命名空間\\":"起始路徑",    
},

PSR-0:

  use root命名空間[\額外路徑]\類名 <==> 對應文件路徑:起始路徑+root命名空間 + [額外路徑] + 類文件(必須與類名一致)

       new \root命名空間[\額外路徑]\類名() <==> 映射的類:起始路徑+root命名空間 + [額外路徑] + 類文件(必須與類名一致)下的類名 且類名必須聲明 namespace root命名空間[\額外路徑

PSR-4:

  use root命名空間[\額外路徑]\類名 <==> 對應文件路徑:起始路徑+ [額外路徑] + 類文件(必須與類名一致)

       new \root命名空間[\額外路徑]\類名() <==> 映射的類:起始路徑+ [額外路徑] + 類文件(必須與類名一致)下的類名 且類名必須聲明 namespace root命名空間[\額外路徑

psr-4比psr-0路徑更簡潔

composer只是自動加載定義在autoload中的沒有require類文件  要想成功實例化類 加載的類文件必須 申明完整的命名空間

若是在實例化類的當前文件爲申明命名空間 那麼以\開頭或者不以\開頭都是能夠的  不然必須以\開頭(前提是沒有use而直接實例化哦)

關於Foo(root命名空間)會匹配到FooBar的狀況?

 

----------------------------------------------------------------------------------------------------------over------------------------------------------------------------------------------------------------------

 

 

若是:要把項目打包成公共包發佈,那麼這些仍是須要寫上的不然這裏的全部字段都是可選的{

"name": "topthink/thinkphp",// 包(該項目)的名字 以 / 分隔。包的全部者(通常都用github名)/包名(不少人會用Github的代碼庫名稱來命名方便搜索)
    "description": "the ThinkPHP Framework",//簡潔項目描述 (詳細能夠寫在README.md文件裏)
    "type": "framework",
    "keywords": ["framework","thinkphp","ORM"],//關鍵詞的值是一個字符串數組,在發佈成公用庫的是時候,做爲元數據信息,有利於包的搜索和發現
    "homepage": "http://thinkphp.cn/", //主頁,能夠放你想放的任何頁面地址
    "license": "Apache2",//若是你決定將包公開發布,那麼記得選擇一個合適的許可證。這樣別的程序員在引用包的時候,經過查看許可證,確保沒有法律上的問題
    "authors": [ { "name": "liu21st",
            "email": "liu21st@gmail.com" } ],//發佈該項目的做者信息 // 依賴管理
    "require": { "php": ">=5.3.0",     //改項目的最低php版本爲5.3
"ext-mbstring": "*", //依賴php的mbstring擴展
"swiftmailer/swiftmailer": "4.3.*@dev",// 報名/版本 這裏表示該項目依賴於swiftmailer的五、4.3.0~4.3.*的開發版本 "phpoffice/phpexcel": "dev-master" //該項目依賴phpexcel的dev-maser版本 }, "minimum-stability": "dev"//來告訴Composer當前開發的項目的依賴要求的包的全局穩定性級別,它的值包括:dev、alpha、beta、RC、stable,stable是默認值 //有些包依賴只會在開發過程當中使用,正式發佈的程序不須要這些包定義在這裏 "require-dev": { "codeception/codeception": "2.0.0 " } } 

 

 

Root 包

 

「root 包」是指由 composer.json 定義的在你項目根目錄的包。這是 composer.json 定義你項目所需的主要條件。(簡單的說,你本身的項目就是一個 root 包)

 

某些字段僅適用於「root 包」上下文。 config 字段就是其中一個例子。只有「root 包」能夠定義。在依賴包中定義的 config 字段將被忽略,這使得 config 字段只有「root 包」可用(root-only)。

 

若是你克隆了其中的一個依賴包,直接在其上開始工做,那麼它就變成了「root 包」。與做爲他人的依賴包時使用相同的 composer.json 文件,但上下文發生了變化。

 

注意: 一個資源包是否是「root 包」,取決於它的上下文。 例:若是你的項目依賴 monolog 庫,那麼你的項目就是「root 包」。 可是,若是你從 GitHub 上克隆了 monolog 爲它修復 bug, 那麼此時 monolog 就是「root 包」。

 

參數一覽:  中文翻譯

一、name

包的名字。由供應方(vendor)名和項目名組成,用 / 分隔。斜杆前面部分,表明包的全部者

在發佈包的時候須要填。

二、description

對包的一個簡短描述,一般是一行的長度。

在發佈包的時候須要填。

三、version

包的版本。

格式必須是 X.Y.Z,選擇性後綴:-dev、-alphaN、-betaN、-RCN。

四、type

    包的類型,默認爲 library。

    包類型用於定製安裝邏輯。若是你的包的安裝須要一些特殊的邏輯,你能夠定義一個定製的類型。它能夠是一個 symfony-bundle 的類型,或者 wordpress-plugin,或者 typo3-module。這些類型將被特定的項目所用,它們將提供安裝器來安裝這些類型的包。

    Composer 支持 3 種類型:

        ①library:默認值。它將複製文件到 vendor 目錄。

        ②project:它表示這是個項目,而不是庫。好比像 Symfony 標準版這種應用。

        ③metapackage:一個含有依賴的空包,能觸發安裝,但不包含文件,不會向文件系統寫任何東西。

composer-install:爲其餘的定製類型的包提供安裝器的包。

五、keywords

一個與包相關的關鍵詞數組。用於包的搜索和過濾。

可選。

六、homepage

項目的網站 URL。

可選。

七、time

版本發佈時間。必須是 YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS 格式。

可選。

八、license

包的許可證。能夠是字符串或字符串數組。

可選,但強烈建議加上。

九、authors

    包的做者。是個對象數組。

    每一個 author 對象有這些屬性:

        name:做者名字
        email:做者郵箱
        homepage:做者網站 URL
        role:做者在項目中的角色(如:developer 或 translator)

十、support

    各類關於該項目如何獲取支持的信息。包含這些屬性:

        email:獲取支持的郵箱
        issues:問題跟蹤的 URL
        forum:論壇的 URL
        wiki:Wiki 的 URL
        irc:IRC 的頻道
        source:查看或下載源碼的 URL

可選。

十一、Package links

依賴包的映射表,由包名映射版本約束。如:

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

    列出包所依賴的包。除非這些依賴已經存在,不然這個包不會被安裝。

(2)require-dev(root-only)

    列出開發這個包(或跑測試等等)所依賴的包。在使用 install 命令時,只有帶上 「–dev」 參數才能安裝 dev 包。在使用 update 命令時,帶上 「–no-dev」 則不更新。

(3)conflict

    列出包會和哪些包發生衝突。它們將不被容許和你的包一塊兒安裝。若是約束了版本,則只會針對特定的版本。

(4)replace

    列出哪些包要被這個包替代。

(5)provide

    這個包所推薦的包列表。這個對公共接口最有用,一個包能夠依賴一個虛擬的 logger 包,而實現 logger 接口的庫能夠放到 provide 字段中。

十二、suggest

    建議一些能讓這個包工做的更好或獲得加強的包列表。這些信息只在包安裝完成時給出,暗示用戶能夠添加更多包,雖然不是必需要安裝的。

格式是,包名映射文字說明,如:

提供給 PHP autoloader 的自動加載映射。

目前支持的有:PSR-0 自動加載規範,classmap 生成器,還有 files。

PSR-0 是比較推薦的,由於它的優秀的擴展性(在添加新的類的適合,不須要從新生成自動加載器)。

(1)PSR-0

    在 psr-0 鍵名下,定義一個命名空間到路徑的映射表,相對於包的根目錄。注意,這也一樣支持 PEAR-style 的沒有命名空間的風格。

    請注意命名空間的聲明得以 \\ 結尾,確保自動加載器正確響應。

    PSR-0 的引用能夠在安裝或更新時生成的文件中查看:
    vendor/composer/autoload_namespaces.php

   例子:

{
    "autoload": {
        "psr-0": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": "src/",
            "Vendor_Namespace_": "src/"
        }
    }
}

若是你須要在多個目錄裏查找同一個前綴的命名空間,你能夠用數組,如:

{
    "autoload": {
        "psr-0": { "Monolog\\": ["src/", "lib/"] }
    }
}

PSR-0 風格並不侷限於加載命名空間的聲明的東西,也能夠用於類這個層級。當庫中只有一個在全局命名空間中的類時,這種方式就能用上。好比你有個 PHP 源文件放在項目的根目錄,你能夠這樣聲明:

{
    "autoload": {
        "psr-0": { "UniqueGlobalClass": "" }
    }
}

若是你有個目錄下全是用命名空間組織的,你能夠用空前綴:

{
    "autoload": {
        "psr-0": { "": "src/" }
    }
}

(2)Classmap

classmap 的引用能夠在安裝或更新時生成的文件中查看:
vendor/composer/autoload_classmap.php

類映射表是經過掃描指定的目錄或文件下的全部的 .php 和 .inc 文件生成的。

你能夠給任何不支持 PSR-0 的庫用 classmap 生成器實現自動加載。配置上只要指定類所在的目錄或文件便可:

{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}

(3)files

若是你肯定須要在任何請求中都加載某些文件,你可使用 files 自動加載機制。對於那些包中有些 PHP 函數但不能自動加載時特別有用。例如:

{
    "autoload": {
        "files": ["src/MyLibrary/functions.php"]
    }
}

 

1四、autoload-dev (root-only)

開發環境運行測試組件所需的類不該包含在上面主要的自動加載規則中,以免在生產環境中以及當其餘人將包做爲依賴項使用時污染自動加載程序。

所以,爲您的單元測試依賴一個專用的路徑並將其添加到autoload-dev部分是一個好主意如:

    "autoload-dev": {
        "psr-4": { "MyLibrary\\Tests\\": "tests/" }
    }

 

 

1五、include-path

(將被棄用,它的功能由 autoload 代替。其實就是設置 include_path,可選)

1六、target-dir

指定安裝目標路徑。

若是包的根目錄是在命名空間下,自動加載就不正確了,因此纔有 target-dir 來解決這個問題。

Symfony 就是個例子。它由不少組件包組成。Yaml 組件是在

命名空間下的,它的根目錄是 Yaml 目錄。要讓自動加載正常工做,咱們要確保它不是安裝在

vendor/symfony/yaml

,而是安裝在

vendor/symfony/yaml/Symfony/Component/Yaml

,這樣自動加載器才能從 vendor/symfony/yaml 加載它。
因此要定義 target-dir 以下:

{
    "autoload": {
        "psr-0": { "Symfony\\Component\\Yaml\\": "" }
    },
    "target-dir": "Symfony/Component/Yaml"
}

 

1七、minimum-stability(root-only)

    定義根據穩定性如何過濾包。默認是 stable,若是你信賴一個 dev 包,你須要指明。

1八、prefer-stable(root-only)

    若是開啓,Composer 會在穩定包和不穩定包中選擇前者。

1九、repositories(root-only)

    定製包的倉庫地址。

    默認的,Composer 只使用 Packagist 倉庫。經過指定倉庫地址,你能夠從任何地方獲取包。

   倉庫不能遞歸。你只能將它們添加到主的 composer.json 中。所依賴包中 composer.json 文件中的倉庫定義是被忽略的。

支持的倉庫的類型有:

(1)composer

    composer 倉庫經過網絡提供 packages.json 文件,它包含一個 composer.json 對象的列表,還有額外的 dist 或 source 信息。packages.json 文件經過 PHP 流加載。

(2)vcs

    版本控制系統倉庫,如:git、svn、hg。

(3)pear

    經過它,你能夠導入任何 pear 倉庫到你的項目中。

(4)package

    若是你依賴一個不支持 composer 的項目,你能夠定義一個 package 類型的倉庫,而後將 composer.json 對象直接寫入。

完整的例子:

{
    "repositories": [
        {
            "type": "composer",
            "url": "http://packages.example.com"
        },
        {
            "type": "composer",
            "url": "https://packages.example.com",
            "options": {
                "ssl": {
                    "verify_peer": "true"
                }
            }
        },
        {
            "type": "vcs",
            "url": "https://github.com/Seldaek/monolog"
        },
        {
            "type": "pear",
            "url": "http://pear2.php.net"
        },
        {
            "type": "package",
            "package": {
                "name": "smarty/smarty",
                "version": "3.1.7",
                "dist": {
                    "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
                    "type": "zip"
                },
                "source": {
                    "url": "http://smarty-php.googlecode.com/svn/",
                    "type": "svn",
                    "reference": "tags/Smarty_3_1_7/distribution/"
                }
            }
        }
    ]
}

20、config(root-only)

    針對項目的一些配置。

process-timeout:          默認 300 秒,Composer 進程執行超時時間;
use-include-path:         默認 false,若是是 true,Composer 自動加載器也會到 PHP 的 include_path 中查找;
preferred-install:          默認 auto,設置 Composer 安裝方式;
github-protocols:          默認 [「git」, 「https」],設置與 github 通訊協議;
github-oauth:               設置 oauth;
vendor-dir:                  默認 vendor,你能夠換成別的;
bin-dir:                        默認 vendor/bin,若是項目有二進制文件,會連接到這;
cache-dir:                    默認 $home/cache,存放 Composer 運行時產生的緩存;
cache-files-dir:             默認 $cache-dir/files,存放包的 zip 文件;
cache-repo-dir:            默認 $cache-dir/repo,存放倉庫元數據;
cache-vcs-dir:              默認 $cache-dir/vcs,存放 vcs 克隆;
cache-files-ttl:              默認六個月,緩存的過時時間;
cache-files-maxsize:     默認 300M;
notify-no-install:          默認 true,從倉庫安裝包會有個通知,能夠關掉;
discard-changes:          默認false,如何處理髒的更新;

 

2一、scripts(root-only)

     Composer 容許你在安裝進程中安裝鉤子腳本,鉤子是基於事件的;

2二、extra

    供 scripts 消費的額外數據;

2三、bin

    指定哪些文件必須被當作二進制文件處理的;

2四、archive

    設置建立包時的選項,exclude 屬性能夠設置排除哪些目錄,例如:

{
    "non-feature-branches": ["latest-.*"]
}

這時composer show -s 會給你 versions : * dev-latest-testing.

Optional.

相關文章
相關標籤/搜索