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 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%的效能損失。