日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

npm升级依赖包_Taro跨端开发之依赖管理

發(fā)布時間:2023/12/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 npm升级依赖包_Taro跨端开发之依赖管理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

昨天跑的好好項目,今天跑不起來

我們在開發(fā)周期比較長的前端項目的時候,必然會遇到依賴管理的問題. 我們在開發(fā)項目的時候,我們用了大量的三方庫.這些三方的依賴庫時不時的會更新自己的代碼.

第三方依賴庫的代碼更新會很容易造成代碼運行的不穩(wěn)定, 比如昨天還跑的好好的項目,另一位剛剛接手的同學(xué)重新安裝依賴之后項目就完全跑不起來了. 或者自己機器跑的好好的代碼,扔到打包機上重新打包之后就完全跑不起來.

因為三方依賴庫用的太多,很多時候并不能很快速的定位到項目為什么跑不起來. 特別是開發(fā)RN項目的時候,一個依賴更新的問題可能會定位一個大半天才能找到罪魁禍首(曾經(jīng)的我為了這種事情浪費了大量的青春).

鎖定NPM依賴版本

對于那些你不熟悉,或者不能保證穩(wěn)定的三方npm包,我這邊的做法是直接鎖定版本號. 這件事情做的越早越好,不要盲目相信三方npm越更新性能越好. 他會時不時的讓你痛一下.讓你浪費大量的時間去尋找到底是誰影響了你的代碼正常運行.

第三方npm包有bug如何解決?

升級原有npm包版本

如果你發(fā)現(xiàn)了你的第三方npm有bug,建議不要盲目的升級版本.

第一步你需要先看這個npm包的 changelog,如果有明確修復(fù)過這個bug, 才會建議你升級.但是不能保證升級之后可能會帶來其他bug.

修掉bug發(fā)布在公司私有源

但是我還是比較建議,在原來版本的npm包上修掉這個bug,并且修改npm包名為公司內(nèi)部包,發(fā)布到公司私有npm源上.

如果因為npm版本的改動,導(dǎo)致項目不穩(wěn)定,也可以縮小排查范圍,快速定位到是哪一個npm庫導(dǎo)致的問題.

例如: mobx => @公司源/mobx

小技巧: .npmrc配置

如果你有發(fā)布到公司私有源的三方npm包, 你可以嘗試修改.npmrc文件使用npm名的作用域直接指向公司私有源

例如:

@公司源:registry=http://npm.xxx.com @tarojs:registry=http://npm.xxx.com

所有項目依賴統(tǒng)一管理

上面說到了我們將所有的有不穩(wěn)定的npm包鎖定版本,保證項目長期維護可以正常運行. 現(xiàn)在我們團隊開發(fā)的跨端項目將近上百個. 為了保證上百個的項目可以長期穩(wěn)定運行. 我將所有的依賴封裝成了一個npm庫,里面沒有任何的js代碼,只有穩(wěn)定的依賴. 所有的項目都會引入這個核心的依賴,以保證所有項目可以穩(wěn)定運行.

保證項目使用npm的差異化,強行指定版本

所有依賴全部統(tǒng)一之后,肯定會有項目因為一些原因不想使用個別的三方npm包. 這里就必須要提到package.json依賴管理的 resolutions屬性. 這樣npm就會將多版本共存的版本,強行指定某一版本,滿足個別項目的特定需求.

使用方法如下:

// package.json {"resolutions": {"hoek": "4.2.1"} }

當然你也可以使用這個工具,將依賴強制指定版本: https://www.npmjs.com/package/npm-force-resolutions

加速你的npm安裝速度

除了大家都知道的npm換源之外,npm依賴的執(zhí)行文件下載也會拖慢你的依賴安裝速度.

以下是我們團隊使用的.npmrc配置,對于一些npm依賴的執(zhí)行文件, 可以使用該配置加速你的npm構(gòu)建速度.

.npmrc文件的位置在你的home目錄下,你也可以在項目根目錄創(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中的版本號規(guī)則

版本的格式: major.minor.patch

主版本號.次版本號.修補版本號

>version

必須大于某個版本

如:>1.1.2,表示必須大于1.1.2版

>=version

可大于或等于某個版本

如:>=1.1.2,表示可以等于1.1.2,也可以大于1.1.2版本

<version

必須小于某個版本

如:<1.1.2,表示必須小于1.1.2版本

<=version

可以小于或等于某個版本

如:<=1.1.2,表示可以等于1.1.2,也可以小于1.1.2版本

~version

大概匹配某個版本

如果minor版本號指定了,那么minor版本號不變,而patch版本號任意

如果minor和patch版本號未指定,那么minor和patch版本號任意

如:~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

兼容某個版本

版本號中最左邊的非0數(shù)字的右側(cè)可以任意

如果缺少某個版本號,則這個版本號的位置可以任意

如:^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標識符

x的位置表示任意版本

如:1.2.x,表示可以1.2.0,1.2.1,.....,1.2.n

*標識符

任意版本,""也表示任意版本

如:*,表示>=0.0.0的任意版本

version1 - version2

大于等于version1,小于等于version2

如:1.1.2 - 1.3.1,表示包括1.1.2和1.3.1以及他們建的任意版本

range1 || range2

滿足range1或者滿足range2,可以多個范圍

如:<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0,表示滿足這3個范圍的版本都可以

***

公眾號“ **Alili丶前端大爆炸**”,關(guān)注后提供海量學(xué)習(xí)資料

總結(jié)

以上是生活随笔為你收集整理的npm升级依赖包_Taro跨端开发之依赖管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。