package.json與package-lock.json

任何事情都不是憑空發生,特別在是技術這件事情上;任何事情都是由最最基礎發展而來的,只要追本溯源就能解決問題。

問題的產生

起因:項目走自動化構建不成功,說一個包連接github失敗,但是在package.json裏面根本沒找到這個包,在代碼裏面也沒看到(神奇臉.jpg)

猜測:可能是哪個包關聯了吧。

結論:確實在package-lock.json裏面發現了這個包,是項目中另一個包引入的問題,看到項目並沒有用,就刪除了,自動化是成功解決了。問題來了,爲什麼會出現這種情況,package.json裏面沒有,但是package-lock.json裏面有。

package.json和package-lock.json

package.json就是我們在使用npm init就會產生的json文件,記錄當前狀態下實際安裝的各個npm package的具體來源和版本號。

package-lock.json是在npm i或者npm update就會產生的json文件(npm 5.x.x或者更大就會有這個文件)

爲什麼會出現package-lock.json?

都知道,我們以前用package.json直接管理包,很方便,但是爲什麼會在後面版本出現一個package-lock.json文件,畢竟存在即合理。比如package.json裏面安裝包“express”:“^ 4.15.4”,這個意思是隻要保證大版本就會被安裝,這樣的設計會出現同樣的package.json但是不同的開發者安裝的包不一樣,可能開發者A在今天安裝是4.15.4,過1一個月開發者B加入,拉代碼安裝,這時候express更新了,變成了4.16.1,那麼這時候開發者B安裝的就是4.16.1。理論上是兼容的,但是也許會產生不同的結果,正因爲這個不確定性,package-lock.json出現了,看lock英文就知道意思了。

package-lock.json鎖定每個包的版本,讓不同的開發者安裝的包是同一個版本,所以建議把package-lock.json提交到項目遠程,不要禁用他。

我們都習慣使用cnpm來操作,但是cnpm去package-lock.json沒用,也就是隻有npm的命令纔會更改package-lock.json裏面的內容。所以建議使用npm i操作更新。

回到上面的問題:爲什麼會出現package.json裏面沒有,但是還存在在package-lock.json裏。其實是因爲操作不當,一個開發者手動刪除了package.json裏面的東西(自己覺得沒用了),最後其他同事使用cnpm i下載包,那麼package-lock.json裏面的東西就一直沒變。

參考資料:

https://segmentfault.com/a/1190000017239545

https://docs.npmjs.com/configuring-npm/package-lock-json.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章