composer命令

AprMay發表於2022-10-07
  • composer 是 php 的一個依賴管理工具。它允許你申明專案所依賴的程式碼庫,它會在你的專案中為你安裝他們。

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

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

    那麼就有可能發生這麼一個情況,對於同一份composer.json,我們在不同時刻拉取到的依賴檔案可能不同(因為composer會在滿足條件的情況下去拉取最新的那份依賴),從而導致一些異常情況。

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

    1、當你執行composer update的時候,composer會去讀取composer.json中指定的依賴,去分析他們,並且去拉取符合條件最新版本的依賴。
    然後他會把所拉取到的依賴放入vendor目錄下,並且把所有拉取的依賴的精確版本號寫入composer.lock檔案中。
    2、composer install所執行的事情非常類似,只在第一步的時候有差別。當你本地如果已經存在一份composer.lock時,
    它將會去讀取你的composer.lock而非composer.json,並且以此為標準去下載依賴。
    當你本地沒有composer.lock的時候,它所做的事情和composer update其實並沒有區別。

    這意味著,只要你本地有一份composer.lock,你就可以保證無論過去了多久,你都能拉到相同的依賴。而如果你把它納入你的專案的版本控制中,

    那麼你就可以確保你專案中的每一個人、每一臺電腦,

    不管什麼系統,都能拉取到一模一樣的依賴,以減少潛在的依賴對部署的影響。當然,請記得,你應該使用的命令是composer install

    那什麼時候該使用composer update呢?當你修改了你的依賴關係,不管是新增了依賴,還是修改了依賴的版本,又或者是刪除了依賴,

    這時候如果你執行composer install的時候,是不會有任何變更的,但你會得到一個警告資訊

    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.

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

    會發現其中有一個hash欄位,這就是當時對應的那份依賴的雜湊值。**如果值不一致自然而然就知道發生了變更了。

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

    如果你不希望影響別的已經安裝的依賴,僅僅更新你修改的部分,那你可以透過指定白名單來確定要更新的範圍,

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

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章