composer命令介紹之install和update及其區別

composer 是 php 的一個依賴管理工具。它容許你申明項目所依賴的代碼庫,它會在你的項目中爲你安裝他們。

然而,對於如何『安裝他們』,新手可能並不清楚。網上的答案有的說 composer install,有的說composer update,而這二者彷佛都能成功把依賴下載下來並安裝好,那麼他們究竟有何區別呢?php

 

首先要搞清楚的一件事情是,全部的依賴都定義在composer.json,手冊中給出了一些基本用法和例子。你可能已經注意到,在指定版本號的時候,咱們並不必定要指明一個精確的版本。html

那麼就有可能發生這麼一個狀況,對於同一份composer.json,咱們在不一樣時刻拉取到的依賴文件可能不一樣(由於composer會在知足條件的狀況下去拉取最新的那份依賴),從而致使一些異常狀況。json

composer updatecomposer install正是爲了解決這個問題而出現的。composer

 

一、當你執行composer update的時候,composer會去讀取composer.json中指定的依賴,去分析他們,而且去拉取符合條件最新版本的依賴。
而後他會把所拉取到的依賴放入vendor目錄下,而且把全部拉取的依賴的精確版本號寫入composer.lock文件中。

 

二、composer install所執行的事情很是相似,只在第一步的時候有差異。當你本地若是已經存在一份composer.lock時,
它將會去讀取你的composer.lock而非composer.json,而且以此爲標準去下載依賴。
當你本地沒有composer.lock的時候,它所作的事情和composer update其實並無區別。

 

這意味着,只要你本地有一份composer.lock,你就能夠保證不管過去了多久,你都能拉到相同的依賴。而若是你把它歸入你的項目的版本控制中,工具

那麼你就能夠確保你項目中的每個人、每一臺電腦,spa

無論什麼系統,都能拉取到如出一轍的依賴,以減小潛在的依賴對部署的影響。固然,請記得,你應該使用的命令是composer install版本控制

 

那何時該使用composer update呢?當你修改了你的依賴關係,不論是新增了依賴,仍是修改了依賴的版本,又或者是刪除了依賴,code

這時候若是你執行composer install的時候,是不會有任何變動的,但你會獲得一個警告信息htm

 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.blog

 

有人可能會很好奇php是怎麼知道我修改了依賴,或者composer.lock已通過期了。很簡單,若是你打開composer.lock的話,

會發現其中有一個hash字段,這就是當時對應的那份依賴的哈希值。若是值不一致天然而然就知道發生了變動了。

這時候,你應該去經過composer update來更新下你的依賴了。

 

若是你不但願影響別的已經安裝的依賴,僅僅更新你修改的部分,那你能夠經過指定白名單來肯定要更新的範圍,

例如composer update monolog/monolog僅會更新monolog/monlog這個依賴,別的依賴哪怕有更新也會被忽略。

 

原文:https://xia.moe/archives/introduce-to-composer-install-and-update/

相關文章
相關標籤/搜索