Composer是 PHP 用來管理依賴(dependency)關係的工具。你可以在自己的專案中宣告所依賴的外部工具庫(libraries),Composer 會幫你安裝這些依賴的庫檔案。
PHP 開發者該知道的 5 個 Composer 小技巧
Composer 是新一代的PHP依賴管理工具。其介紹和基本用法可以看這篇《Composer PHP依賴管理的新時代》。本文介紹使用Composer的五個小技巧,希望能給你的PHP開發帶來方便。
1. 僅更新單個庫
只想更新某個特定的庫,不想更新它的所有依賴,很簡單:
composer update foo/bar
此外,這個技巧還可以用來解決“警告資訊問題”。你一定見過這樣的警告資訊:
Warning: The lock file is not up to date with the latest changes in composer.json, you may be getting outdated dependencies, run update to update them.
擦,哪裡出問題了?別驚慌!如果你編輯了composer.json
,你應該會看到這樣的資訊。比如,如果你增加或更新了細節資訊,比如庫的描述、作者、更多引數,甚至僅僅增加了一個空格,都會改變檔案的md5sum。然後Composer就會警告你雜湊值和composer.lock
中記載的不同。
那麼我們該怎麼辦呢?update
命令可以更新lock檔案,但是如果僅僅增加了一些描述,應該是不打算更新任何庫。這種情況下,只需update nothing
:
$ composer update nothing
Loading composer repositories with package information
Updating dependencies
Nothing to install or update
Writing lock file
Generating autoload files
這樣一來,Composer不會更新庫,但是會更新composer.lock
。注意nothing
並不是update
命令的關鍵字。只是沒有nothing
這個包導致的結果。如果你輸入foobar
,結果也一樣。
如果你用的Composer版本足夠新,那麼你可以直接使用--lock
選項:
composer update --lock
2. 不編輯composer.json
的情況下安裝庫
你可能會覺得每安裝一個庫都需要修改composer.json
太麻煩,那麼你可以直接使用require
命令。
composer require "foo/bar:1.0.0"
這個方法也可以用來快速地新開一個專案。init
命令有--require
選項,可以自動編寫composer.json
:(注意我們使用-n
,這樣就不用回答問題)
$ composer init --require=foo/bar:1.0.0 -n
$ cat composer.json
{
"require": {
"foo/bar": "1.0.0"
}
}
3. 派生很容易
初始化的時候,你試過create-project
命令麼?
composer create-project doctrine/orm path 2.2.0
這會自動克隆倉庫,並檢出指定的版本。克隆庫的時候用這個命令很方便,不需要搜尋原始的URI了。
4. 考慮快取,dist
包優先
最近一年以來的Composer會自動存檔你下載的dist
包。預設設定下,dist
包用於加了tag的版本,例如"symfony/symfony": "v2.1.4"
,或者是萬用字元或版本區間,"2.1.*"
或">=2.2,<2.3-dev"
(如果你使用stable
作為你的minimum-stability
)。
dist包也可以用於諸如dev-master
之類的分支,Github允許你下載某個git引用的壓縮包。為了強制使用壓縮包,而不是克隆原始碼,你可以使用install
和update
的--prefer-dist
選項。
下面是一個例子(我使用了--profile
選項來顯示執行時間):
$ composer init --require="twig/twig:1.*" -n --profile
Memory usage: 3.94MB (peak: 4.08MB), time: 0s
$ composer install --profile
Loading composer repositories with package information
Installing dependencies
- Installing twig/twig (v1.12.2)
Downloading: 100%
Writing lock file
Generating autoload files
Memory usage: 10.13MB (peak: 12.65MB), time: 4.71s
$ rm -rf vendor
$ composer install --profile
Loading composer repositories with package information
Installing dependencies from lock file
- Installing twig/twig (v1.12.2)
Loading from cache
Generating autoload files
Memory usage: 4.96MB (peak: 5.57MB), time: 0.45s
這裡,twig/twig:1.12.2
的壓縮包被儲存在~/.composer/cache/files/twig/twig/1.12.2.0-v1.12.2.zip
。重新安裝包時直接使用。
5. 若要修改,原始碼優先
當你需要修改庫的時候,克隆原始碼就比下載包方便了。你可以使用--prefer-source
來強制選擇克隆原始碼。
composer update symfony/yaml --prefer-source
接下來你可以修改檔案:
composer status -v
You have changes in the following dependencies:
/path/to/app/vendor/symfony/yaml/Symfony/Component/Yaml:
M Dumper.php
當你試圖更新一個修改過的庫的時候,Composer會提醒你,詢問是否放棄修改:
$ composer update
Loading composer repositories with package information
Updating dependencies
- Updating symfony/symfony v2.2.0 (v2.2.0- => v2.2.0)
The package has modified files:
M Dumper.php
Discard changes [y,n,v,s,?]?
為生產環境作準備
最後提醒一下,在部署程式碼到生產環境的時候,別忘了優化一下自動載入:
composer dump-autoload --optimize
安裝包的時候可以同樣使用--optimize-autoloader
。不加這一選項,你可能會發現20%到25%的效能損失。
如果你需要幫助,或者想要了解某個命令的細節,你可以閱讀官方文件或者中文文件,也可以檢視JoliCode做的這個互動式備忘單。
原文地址:5 features to know about Composer PHP
譯文地址:PHP 開發者該知道的 5 個 Composer 小技巧
Composer PHP依賴管理的新時代
對於現代語言而言,包管理器基本上是標配。Java有Maven,Python有pip,Ruby有gem,Nodejs有npm。PHP的則是PEAR,不過PEAR坑不少:
- 依賴處理容易出問題
- 配置非常複雜
- 難用的命令列介面
好在我們有Composer,PHP依賴管理的利器。它是開源的,使用起來也很簡單,提交自己的包也很容易。
安裝Composer
Composer需要PHP 5.3.2+才能執行。
$ curl -sS https://getcomposer.org/installer | php
這個命令會將composer.phar
下載到當前目錄。PHAR(PHP 壓縮包)是一個壓縮格式,可以在命令列下直接執行。
你可以使用--install-dir
選項將Composer安裝到指定的目錄,例如:
$ curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
當然也可以進行全域性安裝:
$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer
在Mac OS X下也可以使用homebrew安裝:
brew tap josegonzalez/homebrew-php
brew install josegonzalez/php/composer
不過通常情況下只需將composer.phar
的位置加入到PATH
環境變數就可以,不一定要全域性安裝。
宣告依賴
在專案目錄下建立一個composer.json
檔案,指明依賴,比如,你的專案依賴 monolog:
{
"require": {
"monolog/monolog": "1.2.*"
}
}
安裝依賴
安裝依賴非常簡單,只需在專案目錄下執行:
composer install
如果沒有全域性安裝的話,則執行:
php composer.phar install
自動載入
Composer提供了自動載入的特性,只需在你的程式碼的初始化部分中加入下面一行:
require 'vendor/autoload.php';
模組倉庫
packagist.org是Composer的倉庫,很多著名的PHP庫都能在其中找到。你也可以提交你自己的作品。
高階特性
以上介紹了Composer 的基本用法。Composer還有一些高階特性,雖然不是必需的,但是往往能給PHP開發帶來方便。
專案主頁
更多資訊請訪問 Composer 的官方主頁或者中文站點。
原文地址:Composer PHP依賴管理的新時代
Composer 是什麼
簡單來說,Composer 是一個新的安裝包管理工具,服務於 PHP 生態系統。它實際上包含了兩個部分:Composer 和 Packagist.下面我們就簡單說一下他們各自的用途。
Composer
Composer 是由 Jordi Boggiano 和 Nils Aderman 創造的一個命令列工具,它的使命就是幫你為專案自動安裝所依賴的開發包。Composer 中的很多理念都借鑑了 npm 和 Bundler,如果你對這兩個工具有所瞭解的話,就會在 composer 中發現他們的身影。Composer 包含了一個依賴解析器,用來處理開發包之間複雜的依賴關係;另外,它還包含了下載器、安裝器等有趣的東西。
作為一個使用者,你所要做的就是在 composer.json
檔案中宣告當前專案所依賴的開發包,然後執行composer.phar install
就行了。composer.json
檔案定義了當前專案所依賴的開發包和 composer 的配置資訊。下面是一個小型例項:
{
"require": {
"monolog/monolog": "1.2.*"
}
}
Packagist
Packagist 是 Composer 的預設的開發包倉庫。你可以將自己的安裝包提交到 packagist,將來你在自己的 VCS (原始碼管理軟體,比如 Github) 倉庫中新建了 tag 或更新了程式碼,packagist 都會自動構建一個新的開發包。這就是 packagist 目前的運作方式,將來 packagist 將允許直接上傳開發包。