說到package-lock.json
, 大家應(yīng)該知道當(dāng)執(zhí)行npm install
之后會產(chǎn)生, 實(shí)際上凡是當(dāng)npm執(zhí)行涉及到node_modules
及package.json
改動(dòng)的操作時(shí), package-lock.json
都會發(fā)生改變, 其具體描述了當(dāng)前依賴樹是什么樣子及每個(gè)依賴鎖定的版本
package-lock.json
是在npm v5.x.x開始有的, 在平時(shí)的項(xiàng)目中官研,筆者看到很多人都是直接將package-lock.json
刪除, 重新安裝 忽略了其作用秽澳,其實(shí)它可以幫助我們更好的做好依賴管理,來看看文檔里列舉的幾項(xiàng)優(yōu)點(diǎn)
- Describe a single representation of a dependency tree such that teammates, deployments, and continuous integration are guaranteed to install exactly the same dependencies.
- Provide a facility for users to “time-travel” to previous states of node_modules without having to commit the directory itself.
- To facilitate greater visibility of tree changes through readable source control diffs.
- And optimize the installation process by allowing npm to skip repeated metadata resolutions for previously-installed packages.
上面大概的意思是 我們能夠通過package-lock.json
保證在CI和部署這樣的場景下保證依賴的一致性, 同時(shí)更好的做好依賴的版本控制, 而且它還可以起到優(yōu)化依賴安裝, 提高安裝速度
拋開其他幾點(diǎn)不說戏羽,我們先說一下CI和部署這樣的場景下保證依賴的一致性, 筆者認(rèn)為這點(diǎn)是package-lock.json
給我們帶來的最大好處
場景
筆者曾經(jīng)遇到一個(gè)這樣的場景, 之前安裝過的第三方依賴vue-property-decorator
担神,在本地開發(fā)時(shí)是正常工作的,但是當(dāng)部署到線上時(shí), 實(shí)際表現(xiàn)不一致, 排查下發(fā)現(xiàn)是線上環(huán)境與開發(fā)環(huán)境版本不一致導(dǎo)致的, 最后通過npm ci
配合package-lock.json
解決了這個(gè)問題.
當(dāng)然你也可以通過寫死版本號的方式來做到這樣蛛壳,但是既然有了package-lock.json
這樣更好的解決方案杏瞻,為何不用呢?
注意
需要注意的是 當(dāng)package.json
的依賴有更新的版本時(shí), 安裝依賴的版本會被更新, 所以為確保在CI和部署這樣的場景下保證依賴的一致性衙荐,請使用npm ci進(jìn)行相關(guān)依賴捞挥, 這個(gè)命令會完全按照package-lock.json
鎖定的版本進(jìn)行安裝
相關(guān)參考
npm install與package-lock.json相關(guān)issue
npmjs docs
everything-you-wanted-to-know-about-package-lock-json