我開始使用composer php,我對此知之甚less,並且對Web應用程序開發有一點經驗。
我只是走過Nettuts +教程 ,所以我有關於composer php的基本問題。
{ "require": { "laravel/framework": "4.0.*", "way/generators": "dev-master", "twitter/bootstrap": "dev-master", "conarwelsh/mustache-l4": "dev-master" }, "require-dev": { "phpunit/phpunit": "3.7.*", "mockery/mockery": "0.7.*" }, "autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ] }, "scripts": { "post-update-cmd": "php artisan optimize" }, "minimum-stability": "dev" }
- 無論出現在“require-dev”部分,只會下載和安裝composer php安裝–dev ?
- 我讀了一些composer php的文檔,但仍然不明白我們有什么“需要開發”的一部分? 是因為我們想要得到特定版本的軟件包,而總是得到最新的穩定版本?
不同的環境
通常,軟件將運行在不同的環境中:
development
testing
staging
production
不同環境中的不同依賴關系
在composer.json
的require
部分中聲明的依賴關系通常是運行應用程序或包中所需的依賴關系
staging
production
環境,而在require-dev
部分中聲明的依賴關系通常是依賴關系
developing
testing
環境。
例如,除了用於實際運行應用程序的軟件包之外,開發軟件可能還需要軟件包,例如:
friendsofphp/php-cs-fixer
(檢測並修復編碼風格問題)squizlabs/php_codesniffer
(檢測並修復代碼風格問題)phpunit/phpunit
(使用testing來推動開發)- 等等
部署
現在,在development
和testing
環境中,您通常會運行
$ composer install
安裝production
和development
依賴。
但是,在staging
和production
環境中,只需安裝運行應用程序所需的依賴關系,並且作為部署過程的一部分,通常會運行
$ composer install --no-dev
只安裝production
依賴關系。
語義
換句話說,部分
require
require-dev
向composer
指出在運行時應該安裝哪些軟件包
$ composer install
要么
$ composer install --no-dev
就這些。
注釋應用程序或程序包所依賴的程序包的開發依賴性將永遠不會被安裝
作為參考,請參閱:
-
根據composer php手冊 :
require-dev(僅限根)
列出開發這個軟件包或運行testing等所需的軟件包。默認情況下安裝根軟件包的開發需求。
install
或update
支持--no-dev
選項,以防止安裝dev依賴項。所以運行
composer install
也將下載開發依賴。 -
原因其實很簡單。 在為特定的圖書館做貢獻時,您可能需要運行testing套件或其他開發工具(如symfony)。 但是,如果將此庫安裝到項目中,則可能不需要這些開發依賴項:並非每個項目都需要testing運行程序。
從composer php網站(很明顯)
要求#
列出這個包所需的包。 除非滿足這些要求,否則不會安裝該軟件包。
require-dev(僅限根)#
列出開發這個軟件包或運行testing等所需的軟件包。默認情況下安裝根軟件包的開發需求。 安裝或更新都支持–no-dev選項,以防止安裝dev依賴項。
在Composer中使用require-dev,您可以聲明開發/testing項目所需的依賴關系,但不需要在生產環境中使用。 當您將項目上傳到生產服務器(使用git)時, require-dev
部分將被忽略。
另外檢查由作者和這篇文章張貼這個答案以及。
require部分本節包含了更適合在生產環境中安裝/需要的軟件包/依賴關系。
require-dev部分:本節包含開發人員可以使用的軟件包/依賴項來testing她的代碼(or for the experiment purpose on her local machine and she wants these packages should not be installed on the production environment.)