團(tuán)隊(duì)協(xié)作如何確保項(xiàng)目Node版本的一致性?
前言
想必大家在工作過程中都遇到過node版本帶來的各種各樣的問題,對(duì)于團(tuán)隊(duì)協(xié)作項(xiàng)目,你不能保證所有人的本地node版本都相同,所以在項(xiàng)目文檔中往往會(huì)寫上以下內(nèi)容:
- 為與線上環(huán)境一致,請(qǐng)保證以下版本
- node:15.x.x
- vue-cli:4.4.x
但這樣并不能完全避免問題,比如多個(gè)不同項(xiàng)目中使用的node版本也有所不同,在來回切換中就可能造成node版本混用,那么應(yīng)該如何避免這個(gè)問題?
package.json
對(duì)于前端工程化項(xiàng)目,根目錄下都會(huì)有一個(gè)package.json文件,在該文件中有一個(gè)屬性engines,它表示聲明node環(huán)境,如果不指定版本(或者指定 *作為版本) ,那么任何版本的node都可以。
"engines": {
"node": ">=15.0.0"
}
比如這里指定node版本必須大于等于15。
了解更多package.json內(nèi)容,可以查看這篇文章:熟悉又陌生的package.json
但對(duì)于 npm 來講,但即使許多項(xiàng)目定義了最低 Node.js 版本,此配置也不會(huì)強(qiáng)制執(zhí)行,也就是說它并不會(huì)阻止用戶的安裝操作。
npm
比如node版本限制了大于等于15,而我使用14.19.3的版本來安裝依賴
你會(huì)發(fā)現(xiàn)這樣還是能夠正常安裝,并沒有按我們的期待阻止用戶安裝依賴。
yarn
同樣的配置我們?cè)賮碓囋噛arn的表現(xiàn)是怎樣的?
圖片
可以看到同樣的配置,yarn的表現(xiàn)是我們想要的效果。如果我們就是想用npm,能否到達(dá)同樣的效果?
.npmrc
對(duì)于npm我們需要在項(xiàng)目根目錄下新增.npmrc文件,并且顯示啟用嚴(yán)格的node引擎處理,如果一個(gè)項(xiàng)目包含一個(gè).npmrc定義嚴(yán)格的引擎,那么執(zhí)行npm install時(shí)如果 Node 版本不滿足版本要求,安裝依賴就會(huì)失敗。
// .npmrc
engine-strict=true