1. 前言
- 應(yīng)該很多人 搞不清楚, 我們天天見天天用的 這個
package.json和package-lock.json到底有啥關(guān)系- 那今天就來捋一下
2. package.json
- 首先在說下這個 我們自以為覺得熟的不能在熟的
package.jsonpackage.json是幫我們管理項目中的依賴包的,讓我們遠離了依賴地獄。- 遵循
commonJS規(guī)范 ,通過npm管理,使用一些簡單的命令,自動生成package.json, 安裝包依賴關(guān)系都由package.json來管理,我們幾乎不必考慮它們。
2.1 版本控制
- 什么是 版本號
- 版本號由三部分組成:
major.minor.patch,主版本號.次版本號.修補版本號。- 例如:1.2.3,主要版本1,次要版本2,補丁3。
補丁中的更改表示不會破壞任何內(nèi)容的錯誤修復(fù)。次要版本的更改表示不會破壞任何內(nèi)容的新功能。主要版本的更改代表了一個破壞兼容性的大變化。如果用戶不適應(yīng)主要版本更改,則內(nèi)容將無法正常工作。
- 指定依賴包版本
1.
~會匹配最近的小版本依賴包,
比如 ~1.2.3 會匹配所有 1.2.x 版本,但是不包括 1.3.0
^會匹配最新的大版本依賴包,
比如 ^1.2.3 會匹配所有 1.x.x 的包,包括 1.3.0,但是不包括 2.0.0*安裝最新版本的依賴包,
比如 *1.2.3 會匹配 x.x.x
- 如何選擇
- 因為版本或多或少總會有些小bug所以小的改動是會經(jīng)常有的 ,用~ 和 ^ 則可以解決這個問題
- 需要注意
^版本更新可能比較大,會造成項目代碼錯誤,所以 建議使用 ~ 來標記版本號,這樣可以保證項目不會出現(xiàn)大的問題,也能保證包中的小bug可以得到修復(fù)。
- 團隊開發(fā) 如何控制版本
- 實際開發(fā)場景 都是團隊 我們也經(jīng)常進行 代碼管理,一般情況下 是不會把 依賴包/
node_modules上傳到云端的,所以 很可能每個人在安裝的時候 版本都會有小的差別- 而且有時候我們并不想要使用最新版本的依賴
- 比如
jQuery有些只需要使用1.10或者2.x- 所以我們需要 固定版本號或者鎖死版本號
3. package-lock.json
- 它會在
npm更改node_modules目錄樹 或者 package.json 時自動生成的 ,它準確的描述了當前項目npm包的依賴樹,并且在隨后的安裝中會根據(jù)package-lock.json來安裝,保證是相同的一個依賴樹,不考慮這個過程中是否有某個依賴有小版本的更新。- 它的產(chǎn)生就是來對整個
依賴樹進行版本固定的(鎖死)
- 當我們在一個項目中
npm install時候,會自動生成一個package-lock.json文件,和package.json在同一級目錄下。package-lock.json記錄了項目的一些信息和所依賴的模塊。這樣在每次安裝都會出現(xiàn)相同的結(jié)果. 不管你在什么機器上面或什么時候安裝。
- 當我們下次再
npm install時候,
npm 發(fā)現(xiàn)如果項目中有 package-lock.json 文件,
會根據(jù)package-lock.json里的內(nèi)容來處理和安裝依賴而不再根據(jù) package.json。
- 需要 注意的是,使用
cnpm install時候,并不會生成 package-lock.json 文件,也不會根據(jù) package-lock.json 來安裝依賴包,還是會使用package.json來安裝。