npm升级依赖包_Taro跨端开发之依赖管理
昨天跑的好好項(xiàng)目,今天跑不起來(lái)
我們?cè)陂_(kāi)發(fā)周期比較長(zhǎng)的前端項(xiàng)目的時(shí)候,必然會(huì)遇到依賴(lài)管理的問(wèn)題. 我們?cè)陂_(kāi)發(fā)項(xiàng)目的時(shí)候,我們用了大量的三方庫(kù).這些三方的依賴(lài)庫(kù)時(shí)不時(shí)的會(huì)更新自己的代碼.
第三方依賴(lài)庫(kù)的代碼更新會(huì)很容易造成代碼運(yùn)行的不穩(wěn)定, 比如昨天還跑的好好的項(xiàng)目,另一位剛剛接手的同學(xué)重新安裝依賴(lài)之后項(xiàng)目就完全跑不起來(lái)了. 或者自己機(jī)器跑的好好的代碼,扔到打包機(jī)上重新打包之后就完全跑不起來(lái).
因?yàn)槿揭蕾?lài)庫(kù)用的太多,很多時(shí)候并不能很快速的定位到項(xiàng)目為什么跑不起來(lái). 特別是開(kāi)發(fā)RN項(xiàng)目的時(shí)候,一個(gè)依賴(lài)更新的問(wèn)題可能會(huì)定位一個(gè)大半天才能找到罪魁禍?zhǔn)?曾經(jīng)的我為了這種事情浪費(fèi)了大量的青春).
鎖定NPM依賴(lài)版本
對(duì)于那些你不熟悉,或者不能保證穩(wěn)定的三方npm包,我這邊的做法是直接鎖定版本號(hào). 這件事情做的越早越好,不要盲目相信三方npm越更新性能越好. 他會(huì)時(shí)不時(shí)的讓你痛一下.讓你浪費(fèi)大量的時(shí)間去尋找到底是誰(shuí)影響了你的代碼正常運(yùn)行.
第三方npm包有bug如何解決?
升級(jí)原有npm包版本
如果你發(fā)現(xiàn)了你的第三方npm有bug,建議不要盲目的升級(jí)版本.
第一步你需要先看這個(gè)npm包的 changelog,如果有明確修復(fù)過(guò)這個(gè)bug, 才會(huì)建議你升級(jí).但是不能保證升級(jí)之后可能會(huì)帶來(lái)其他bug.
修掉bug發(fā)布在公司私有源
但是我還是比較建議,在原來(lái)版本的npm包上修掉這個(gè)bug,并且修改npm包名為公司內(nèi)部包,發(fā)布到公司私有npm源上.
如果因?yàn)閚pm版本的改動(dòng),導(dǎo)致項(xiàng)目不穩(wěn)定,也可以縮小排查范圍,快速定位到是哪一個(gè)npm庫(kù)導(dǎo)致的問(wèn)題.
例如: mobx => @公司源/mobx
小技巧: .npmrc配置
如果你有發(fā)布到公司私有源的三方npm包, 你可以嘗試修改.npmrc文件使用npm名的作用域直接指向公司私有源
例如:
@公司源:registry=http://npm.xxx.com @tarojs:registry=http://npm.xxx.com所有項(xiàng)目依賴(lài)統(tǒng)一管理
上面說(shuō)到了我們將所有的有不穩(wěn)定的npm包鎖定版本,保證項(xiàng)目長(zhǎng)期維護(hù)可以正常運(yùn)行. 現(xiàn)在我們團(tuán)隊(duì)開(kāi)發(fā)的跨端項(xiàng)目將近上百個(gè). 為了保證上百個(gè)的項(xiàng)目可以長(zhǎng)期穩(wěn)定運(yùn)行. 我將所有的依賴(lài)封裝成了一個(gè)npm庫(kù),里面沒(méi)有任何的js代碼,只有穩(wěn)定的依賴(lài). 所有的項(xiàng)目都會(huì)引入這個(gè)核心的依賴(lài),以保證所有項(xiàng)目可以穩(wěn)定運(yùn)行.
保證項(xiàng)目使用npm的差異化,強(qiáng)行指定版本
所有依賴(lài)全部統(tǒng)一之后,肯定會(huì)有項(xiàng)目因?yàn)橐恍┰虿幌胧褂脗€(gè)別的三方npm包. 這里就必須要提到package.json依賴(lài)管理的 resolutions屬性. 這樣npm就會(huì)將多版本共存的版本,強(qiáng)行指定某一版本,滿(mǎn)足個(gè)別項(xiàng)目的特定需求.
使用方法如下:
// package.json {"resolutions": {"hoek": "4.2.1"} }當(dāng)然你也可以使用這個(gè)工具,將依賴(lài)強(qiáng)制指定版本: https://www.npmjs.com/package/npm-force-resolutions
加速你的npm安裝速度
除了大家都知道的npm換源之外,npm依賴(lài)的執(zhí)行文件下載也會(huì)拖慢你的依賴(lài)安裝速度.
以下是我們團(tuán)隊(duì)使用的.npmrc配置,對(duì)于一些npm依賴(lài)的執(zhí)行文件, 可以使用該配置加速你的npm構(gòu)建速度.
.npmrc文件的位置在你的home目錄下,你也可以在項(xiàng)目根目錄創(chuàng)建該文件.chromedriver-cdnurl=https://npm.taobao.org/mirrors/chromedriver couchbase-binary-host-mirror=https://npm.taobao.org/mirrors/couchbase/v{version} debug-binary-host-mirror=https://npm.taobao.org/mirrors/node-inspector electron-mirror=https://npm.taobao.org/mirrors/electron/ flow-bin-binary-host-mirror=https://npm.taobao.org/mirrors/flow/v fse-binary-host-mirror=https://npm.taobao.org/mirrors/fsevents fuse-bindings-binary-host-mirror=https://npm.taobao.org/mirrors/fuse-bindings/v{version} git4win-mirror=https://npm.taobao.org/mirrors/git-for-windows gl-binary-host-mirror=https://npm.taobao.org/mirrors/gl/v{version} grpc-node-binary-host-mirror=https://npm.taobao.org/mirrors hackrf-binary-host-mirror=https://npm.taobao.org/mirrors/hackrf/v{version} leveldown-binary-host-mirror=https://npm.taobao.org/mirrors/leveldown/v{version} leveldown-hyper-binary-host-mirror=https://npm.taobao.org/mirrors/leveldown-hyper/v{version} mknod-binary-host-mirror=https://npm.taobao.org/mirrors/mknod/v{version} node-sqlite3-binary-host-mirror=https://npm.taobao.org/mirrors node-tk5-binary-host-mirror=https://npm.taobao.org/mirrors/node-tk5/v{version} nodegit-binary-host-mirror=https://npm.taobao.org/mirrors/nodegit/v{version}/ operadriver-cdnurl=https://npm.taobao.org/mirrors/operadriver phantomjs-cdnurl=https://npm.taobao.org/mirrors/phantomjs profiler-binary-host-mirror=https://npm.taobao.org/mirrors/node-inspector/ puppeteer-download-host=https://npm.taobao.org/mirrors python-mirror=https://npm.taobao.org/mirrors/python rabin-binary-host-mirror=https://npm.taobao.org/mirrors/rabin/v{version} sass-binary-site=https://npm.taobao.org/mirrors/node-sass sodium-prebuilt-binary-host-mirror=https://npm.taobao.org/mirrors/sodium-prebuilt/v{version} sqlite3-binary-site=https://npm.taobao.org/mirrors/sqlite3 utf-8-validate-binary-host-mirror=https://npm.taobao.org/mirrors/utf-8-validate/v{version} utp-native-binary-host-mirror=https://npm.taobao.org/mirrors/utp-native/v{version} zmq-prebuilt-binary-host-mirror=https://npm.taobao.org/mirrors/zmq-prebuilt/v{version} sentrycli_cdnurl=https://npm.taobao.org/mirrors/sentry-cli附錄 : NPM中的版本號(hào)規(guī)則
版本的格式: major.minor.patch
主版本號(hào).次版本號(hào).修補(bǔ)版本號(hào)
>version
必須大于某個(gè)版本
如:>1.1.2,表示必須大于1.1.2版
>=version
可大于或等于某個(gè)版本
如:>=1.1.2,表示可以等于1.1.2,也可以大于1.1.2版本
<version
必須小于某個(gè)版本
如:<1.1.2,表示必須小于1.1.2版本
<=version
可以小于或等于某個(gè)版本
如:<=1.1.2,表示可以等于1.1.2,也可以小于1.1.2版本
~version
大概匹配某個(gè)版本
如果minor版本號(hào)指定了,那么minor版本號(hào)不變,而patch版本號(hào)任意
如果minor和patch版本號(hào)未指定,那么minor和patch版本號(hào)任意
如:~1.1.2,表示>=1.1.2 <1.2.0,可以是1.1.2,1.1.3,1.1.4,.....,1.1.n
如:~1.1,表示>=1.1.0 <1.2.0,可以是同上
如:~1,表示>=1.0.0 <2.0.0,可以是1.0.0,1.0.1,1.0.2,.....,1.0.n,1.1.n,1.2.n,.....,1.n.n
^version
兼容某個(gè)版本
版本號(hào)中最左邊的非0數(shù)字的右側(cè)可以任意
如果缺少某個(gè)版本號(hào),則這個(gè)版本號(hào)的位置可以任意
如:^1.1.2 ,表示 >=1.1.2 <2.0.0,可以是 1.1.2,1.1.3,.....,1.1.n,1.2.n,.....,1.n.n
如:^0.2.3 ,表示>=0.2.3 <0.3.0,可以是0.2.3,0.2.4,.....,0.2.n
如:^0.0,表示 >=0.0.0 <0.1.0,可以是0.0.0,0.0.1,.....,0.0.n
x標(biāo)識(shí)符
x的位置表示任意版本
如:1.2.x,表示可以1.2.0,1.2.1,.....,1.2.n
*標(biāo)識(shí)符
任意版本,""也表示任意版本
如:*,表示>=0.0.0的任意版本
version1 - version2
大于等于version1,小于等于version2
如:1.1.2 - 1.3.1,表示包括1.1.2和1.3.1以及他們建的任意版本
range1 || range2
滿(mǎn)足range1或者滿(mǎn)足range2,可以多個(gè)范圍
如:<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0,表示滿(mǎn)足這3個(gè)范圍的版本都可以
***
公眾號(hào)“ **Alili丶前端大爆炸**”,關(guān)注后提供海量學(xué)習(xí)資料
總結(jié)
以上是生活随笔為你收集整理的npm升级依赖包_Taro跨端开发之依赖管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 上饶看子宫纵隔最好的医院推荐
- 下一篇: java 布隆过滤器_什么是布隆过滤器(