首先介紹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 self-update
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查當作功安裝否
使用:
命令行進入目標文件夾好比咱們要在網站某個項目下安裝第三方插件【也能夠叫組件】(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" } }
重要:
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" },
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(); //類前面有反斜杆\
自動加載說明:
注意:
一、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;
總結:
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 包」是指由 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"] } }
開發環境運行測試組件所需的類不該包含在上面主要的自動加載規則中,以免在生產環境中以及當其餘人將包做爲依賴項使用時污染自動加載程序。
所以,爲您的單元測試依賴一個專用的路徑並將其添加到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 屬性能夠設置排除哪些目錄,例如:
{ "archive": { "exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"] } }
2五、 abandoned
指示是否已放棄此包。
它能夠是布爾值,也能夠是指向推薦替代方法的包名/URL。例:
"abandoned": true //表示此包已棄用。 或者: "abandoned": "monolog/monolog" //表示此包已被拋棄,推薦的替代方案是monolog/monolog。
默認值爲false。
可選的。
非數字分支名的正則表達式模式列表(例如。「最新的」之類的),這將不會做爲特性分支處理。這是一個字符串數組。
若是您有非數字的分支名稱,例如「最新的」、「當前的」、「最新穩定的」或其餘看起來不像版本號的名稱,那麼Composer將處理這些分支做爲特性分支。這意味着它搜索父分支,這些分支看起來像一個版本,或者以特殊分支(如主分支)結束,根包版本號成爲父分支的版本,或者至少是主分支的版本。
要將非數字命名分支做爲版本處理,而不是搜索具備有效版本或特殊分支名稱(如master)的父分支,您能夠爲分支名稱設置模式,這些模式應該做爲開發版本分支處理。
當您使用「self」進行依賴時,這很是有用。,這樣就不是dev-master,而是安裝了相同的分支(在示例中:最新測試)。
例子:若是您有一個測試分支,它在測試階段進行了大量維護,並部署到登臺環境中,那麼composer show -s一般會爲您提供versions : * dev-master。
若是您配置latest-.*做爲非特徵分支的模式以下:
{ "non-feature-branches": ["latest-.*"] }
這時composer show -s
會給你 versions : * dev-latest-testing
.
Optional.