1. 前言
- 應(yīng)該很多人 搞不清楚挂谍, 我們天天見天天用的 這個(gè)
package.json
和package-lock.json
到底有啥關(guān)系- 那今天就來捋一下
2. package.json
- 首先在說下這個(gè) 我們自以為覺得熟的不能在熟的
package.json
package.json
是幫我們管理項(xiàng)目中的依賴包的桥帆,讓我們遠(yuǎn)離了依賴地獄单默。- 遵循
commonJS
規(guī)范 ,通過npm
管理颅眶,使用一些簡單的命令,自動(dòng)生成package.json
, 安裝包依賴關(guān)系都由package.json
來管理故爵,我們幾乎不必考慮它們刁俭。
2.1 版本控制
- 什么是 版本號(hào)
- 版本號(hào)由三部分組成:
majo
r.minor
.patch
,主版本號(hào).次版本號(hào).修補(bǔ)版本號(hào)酒觅。- 例如:1.2.3撮执,主要版本1,次要版本2舷丹,補(bǔ)丁3抒钱。
補(bǔ)丁
中的更改表示不會(huì)破壞任何內(nèi)容的錯(cuò)誤修復(fù)。次要版本
的更改表示不會(huì)破壞任何內(nèi)容的新功能颜凯。主要版本
的更改代表了一個(gè)破壞兼容性的大變化谋币。如果用戶不適應(yīng)主要版本更改,則內(nèi)容將無法正常工作症概。
- 指定依賴包版本
1.
~
會(huì)匹配最近的小版本依賴包蕾额,
比如 ~1.2.3 會(huì)匹配所有 1.2.x 版本,但是不包括 1.3.0
^
會(huì)匹配最新的大版本依賴包彼城,
比如 ^1.2.3 會(huì)匹配所有 1.x.x 的包诅蝶,包括 1.3.0退个,但是不包括 2.0.0*
安裝最新版本的依賴包,
比如 *1.2.3 會(huì)匹配 x.x.x
- 如何選擇
- 因?yàn)榘姹净蚨嗷蛏倏倳?huì)有些小bug所以小的改動(dòng)是會(huì)經(jīng)常有的 调炬,用~ 和 ^ 則可以解決這個(gè)問題
- 需要注意
^
版本更新可能比較大语盈,會(huì)造成項(xiàng)目代碼錯(cuò)誤,所以 建議使用 ~ 來標(biāo)記版本號(hào)缰泡,這樣可以保證項(xiàng)目不會(huì)出現(xiàn)大的問題刀荒,也能保證包中的小bug可以得到修復(fù)。
- 團(tuán)隊(duì)開發(fā) 如何控制版本
- 實(shí)際開發(fā)場景 都是團(tuán)隊(duì) 我們也經(jīng)常進(jìn)行 代碼管理棘钞,一般情況下 是不會(huì)把 依賴包/
node_modules
上傳到云端的缠借,所以 很可能每個(gè)人在安裝的時(shí)候 版本都會(huì)有小的差別- 而且有時(shí)候我們并不想要使用最新版本的依賴
- 比如
jQuery
有些只需要使用1.10
或者2.x
- 所以我們需要 固定版本號(hào)或者鎖死版本號(hào)
3. package-lock.json
- 它會(huì)在
npm
更改node_modules
目錄樹 或者 package.json 時(shí)自動(dòng)生成的 ,它準(zhǔn)確的描述了當(dāng)前項(xiàng)目npm包的依賴樹宜猜,并且在隨后的安裝中會(huì)根據(jù)package-lock.json
來安裝泼返,保證是相同的一個(gè)依賴樹,不考慮這個(gè)過程中是否有某個(gè)依賴有小版本的更新宝恶。- 它的產(chǎn)生就是來對整個(gè)
依賴樹
進(jìn)行版本固定的(鎖死
)
- 當(dāng)我們在一個(gè)項(xiàng)目中
npm install
時(shí)候符隙,會(huì)自動(dòng)生成一個(gè)package-lock.json
文件,和package.json
在同一級(jí)目錄下垫毙。package-lock.json
記錄了項(xiàng)目的一些信息和所依賴的模塊。這樣在每次安裝都會(huì)出現(xiàn)相同的結(jié)果. 不管你在什么機(jī)器上面或什么時(shí)候安裝拱绑。
- 當(dāng)我們下次再
npm install
時(shí)候综芥,
npm 發(fā)現(xiàn)如果項(xiàng)目中有 package-lock.json 文件,
會(huì)根據(jù)package-lock.json
里的內(nèi)容來處理和安裝依賴而不再根據(jù) package.json猎拨。
- 需要 注意的是膀藐,使用
cnpm install
時(shí)候,并不會(huì)生成 package-lock.json 文件红省,也不會(huì)根據(jù) package-lock.json 來安裝依賴包额各,還是會(huì)使用package.json
來安裝。