Composer與NPM指令 install 與 update 的差異
其實這是一篇偽技術文,實際上是最近面試的心得文
前陣子接連不斷的面試,讓我也學到了不少,有些公司技術背景不錯的,就會由淺入深的問,也有面試官人很好的,類似聊天方式的相互交流技術資訊,整個面試完都沒發現其實自己很多答不出來的東西,都還是面試官經驗分享讓我學習不少,可惜沒有緣分一起合作。
面試找工作真的是一件勞心勞力的事,有些比較體恤求職者的,就會是一試定江山,有些比較謹慎找人的,就會有兩三次的面試流程,也因為這樣從投遞履歷到收到 Offer, 感謝函, 無聲卡等過程所經歷的時間實在是很難掌握,最後會到哪上班似乎也是種緣份!
這裡分享一下之前被問到的一點點東西,原因是自己真的沒弄懂,趁現在來紀錄一下,希望以後要是再被問到,不要又回答錯了。
Composer 基本用法
這裡就不在寫啥是 Composer 了,簡單來說就是開發 PHP 專案時,一個用來方便安裝使用第三方套件的工具,使用上會有一個 composer.json
的相依套件描述檔案。並在安裝過套件後,會產生一份 composer.lock
,如果有使用 Git 這類版本控管工具的話,建議這兩個檔案都要加入追蹤。
Composer.lock
在安裝過相依套件後,會在專案底下額外產生一份 Composer.lock
檔案來鎖定目前安裝的相依套件版本與資訊,之後再執行 install
指令時,會先檢查這份 lock 檔案來安裝,所以當有版本變更或新增套件時,也是會更新這份資料
Composer install
當 composer install
指令執行時,會依序執行以下行為
- 檢查 composer.lock 檔案是否存在
- No, 檔案不存在,改以執行
composer update
來建立 - Yes, 檔案存在,根據 lock 檔內描述安裝指定套件版本
- 已存在套件可能會更新版本
- 若有新增套件,安裝新套件
- No, 檔案不存在,改以執行
Composer update
當執行 composer update
時,會依序執行以下行為
- 檢查
composer.json
檔案 - 根據
composer.json
內的套件版本規格,安裝最新一版 - 安裝後更新資訊到
composer.lock
檔案內
小結
當初開發的專案composer.lock
被加到.gitignore
內,導致後來每次使用 composer 安裝套件的時候,到別人的機器或 server 上就會問題重重,正確的作法應該是要保留composer.lock
檔到 git repository 內,等其他人需要更新時,透過 composer install
來安裝每次變更的紀錄就好
NPM 基本介紹
由於太多處理是要透過後端執行的 Node.js,所以也勢必要學一下 npm 這東西,透過 Node.js 官網提供的檔案安裝後,其實就會將 Node.js 與 NPM 一起裝好,而 NPM(Node Package Manager) 也就是 Node.js 的一些套件管理工具。
目前用自己最多的還是在使用前端自動化工具 Gulp 時,需要安裝許多套件來加速前端自動化處理的流程,在還不知道 Gulp 或是 Grunt 之前,我只能自己土炮 shell script 來跑一些 css, js comporess, concat 等行為。原本想學 Grunt 但是天資不夠聰穎,還沒學會前就跳槽到 gulp 了,沒想到還挺好上手的
使用 npm 來進行套件管理時,專案下可先透過 npm init
來產生一份 package.json
檔案,而之後安裝過的套件記得用 --save
(or --save-dev
) 的參數來將套件名稱與版號加入 package.json
內
NPM 基本指令
# 顯示套件相關資訊 |
npm install vs npm update
這裡可以參考 stack overflow 的一篇精美解釋
{ |
以上可以看出,npm install
基本上就是將尚未安裝過的 module 安裝進去,而 npm update
除了安裝 module 外,還會將已經安裝過的 module,根據版號描述去更新最新版本
小結
記得面試時,面試官問了這幾個指令的差異,但因為我印象中 npm 與 composer 在各自的 install 與 update 行為上似乎是相反的(※正確來說應該是 install 針對已安裝套件有些微不同處理),但當時聽完說明後又有點不清楚,所以決定花點時間查詢並且做一下記錄
Reference
Composer: It’s All About the Lock File