精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

魔方基礎依賴環境隔離實踐

開發 項目管理
如此低效率的更新顯然不能讓人滿意,而且由于魔方自身的原因,當編譯基礎依賴時,其他人是不能再部署其他魔方服務的,這就會阻塞其他人的流程,對開發人員的體驗是十分差的。

魔方是轉轉內部的一個可視化搭建平臺,用于快速搭建一個活動頁面。本次主要分享下在做環境隔離時遇到的一些問題以及解決辦法。

魔方基礎依賴介紹

  • A提供了本地運行組件的能力以及組件需要的所有第三方依賴
  • B提供了配置區的一些常用表單項,如跳轉配置、展示終端配置等
  • C提供了預覽區的一些常用能力,如跳轉、埋點上報等
  • A依賴B和C,B和C又依賴A

圖片

一個魔方組件,通常只需要依賴A即可,因為在安裝A的時候會自動將B & C的內容打包生成到A中。

"dependencies": {
  "A": "^1.0.0"
}

為什么要做環境隔離

之前,我們在編譯某個基礎依賴(例如 B)時:

  • 會發布一個正式包(B@1.0.1)
  • 并將測試服務器上專門存放公共依賴的文件下的node_modules刪除,然后執行npm install重新安裝依賴
  • 在安裝中會使用我們最新發布的B@1.0.1。(此處實際是在一個臨時文件夾中操作,然后安裝后再復制出來的,可以減少測試環境的不可用時間)

舉一個常見的場景來說明下這種模式的問題——小明在開發B,小紅在開發C,兩人都在測試環境進行了編譯,導致發出去了兩個正式包B@1.0.1 & C@1.0.1 。那么此時,如果小明開發測試完了,想要上個線,那么在服務器上執行到npm i的 時候,就會把小紅還未測試完成的包C@1.0.1給安裝到線上環境去。(其實在測試服務器上兩個人的代碼也是混合在一起的,不過畢竟是測試環境,影響較小)

從這個場景分析,可以發現有兩個主要的問題:

  1. 測試環境發布正式包,導致線上無法區分
  2. npm install正常只會安裝正式包,不會安裝beta包

設計思路

針對上述的兩個問題,對應的解決辦法就是:

  1. 測試環境發beta包,線上發正式包
  2. 使用npm install package@version(-beta) 替換npm install

第一點就不說了,大致就是先npm view packageName versions獲取包的所有版本,然后根據環境去獲取最新的正式包版本或者是最新的beta版本,然后修改版本號再發包。

第二點,在更新依賴的時候,通過指定版本號的形式去安裝我們最新發布的包。只不過在線上環境中,安裝的是正式包,測試環境中安裝的beta包。

看起來一切是那么的美好,但現實并不總是一帆風順......

問題復現&解決

初始化一個文件temp,并執行npm i先將所有依賴裝一遍。

此時temp/node_modules下的情況為(此處只舉例A和B,C與B情況相同,不再重復)

A: "A@1.0.0"  A/node_modules下:無其他依賴

B: "B@1.0.0"  B/node_modules下:無其他依賴

接下來,執行 npm i B@1.0.0-beta.1去單獨更新B。

執行結果:

A: "A@1.0.0"  A/node_modules下:B@1.0.0

B: "B@1.0.0-beta.1"  B/node_modules下:無其他依賴

根據npm包安裝的機制,默認情況下是不會使用beta包的,A依賴的B: "^1.0.0"需要使用穩定的版本,所以beta版本被放在最外層,而將之前的B@1.0.0放在了A/node_modules下。

魔方的基礎依賴在使用前會在 A下執行一個externals命令(postinstall:npm run externals)將B的內容打成dist放在A目錄下。但是node_modules依賴的查找順序是先從當前文件目錄下查找的,所以生成dist文件時使用的將會是A/node_modules/下的B@1.0.0,而不是最外層的B@1.0.0-beta.1

所以,我需要手動刪除A/node_modules/B@1.0.0,再去執行externals命令。

那接下來我們再試試在此基礎上更新A,npm i A@1.0.0-beta.1。

結果就是出現了更多冗余的依賴。。。

A: "A@1.0.0-beta.1"  A/node_modules下:B@1.0.0、A@1.0.0

B: "B@1.0.0-beta.1"  B/node_modules下:B@1.0.0、A@1.0.0

原因跟之前一樣,我們安裝的beta版本的A不符合B所依賴的A: "^1.0.0",就導致B下的node_modules中又多了一個A@1.0.0,然后這個A@1.0.0的又依賴一個穩定版本的B,所以在同級目錄下還會再多一個B@1.0.0

同樣的,我們仍需要先手動的去刪除這些冗余的、不符合我們要求的依賴。

綜上,為了確保我們項目中使用的都是我們剛發布的beta包,我們需要在每一次更新依賴時都執行一下這兩條命令去清除冗余的依賴,然后再去執行打包命令。

rm -rf ./node_modules/A/node_modules/
rm -rf ./node_modules/B/node_modules/
rm -rf ./node_modules/C/node_modules/

cd node_modules/A
npm run externals

然而,到這一步還沒完事,我將代碼部署到測試服務器上后,經常出現依賴沒有安裝完成或安裝完沒有生成dist文件的情況,總是執行到一半就“中斷”了。但是我在本地測試的時候卻不會出現這種問題。

經過一步一步的排查,最終將問題定位到了這一行代碼

await shelljs.shellExec()

查看shelljs.shellExec方法:

exports.shellExec = function (command, options = {}) {
  return new Promise((resolve, reject) => {
    Object.assign(options, {timeout: 300000});
    shell.exec(command, options, () => {});
  });
};

經常中斷,難道是過了超時時間?我試著將超時時間從5min改到10min,部署至測試服務器,再次更新依賴,一切正常了......(不得不吐槽這個測試服務器的性能甚至不如我的Mac)

再一看編譯時間,耗時>10min,!真棒。(取反??)

項目名

編譯耗時

A

10:08

B

10:38

優化

如此低效率的更新顯然不能讓人滿意,而且由于魔方自身的原因,當編譯基礎依賴時,其他人是不能再部署其他魔方服務的,這就會阻塞其他人的流程,對開發人員的體驗是十分差的。

「首先就是先分析問題找出原因:」

  1. 很容易想到的,當安裝beta版本的依賴時,總是會額外產生很多冗余的穩定版本的依賴。
  2. 安裝依賴耗時么?耗時,但是至于這么耗時么?不至于。耗時中的大頭另有其因,其實就是A中的externals命令,打包,這個是比較耗費時間的通常需要1-2分鐘。

所以在一定程度上是問題1導致了問題2——安裝了冗余的依賴,其中冗余的A會自動執行externals 命令導致耗時過久。

「所以我們首先需要解決的就是避免安裝冗余的依賴:」

A需要依賴B,是因為需要將B的內容打包生成到A下使用。

B需要依賴A只是因為本地開發時方便調試。

如果去掉B的依賴項,那就可以在安裝B@beta時避免額外安裝A。但是,本地開發B的場景還是很多的,因此需要想個辦法盡可能的減少由此帶來的對開發體驗的影響。

于是我在腳本中加入了一個自動檢查并安裝依賴的命令depcheck。

// dev之前先檢查A:
// list可以列出當前工程下的A情況以及版本
// 如果沒有會返回一個假值并走到npm i命令去安裝A
"predev": "npm list A || npm i --no-save A"

這樣,在安裝B@beta的時候就不會額外安裝A也不會額外執行externals命令了。

那么在安裝A@beta的時候呢?還是會額外安裝冗余的B然后自動執行externals,然后刪除冗余的B,再手動執行一次externals。

「接下來需要針對A再次進行優化:」

由于A是強依賴B的所以不能去掉依賴項,冗余的B肯定是避免不了的,不過這又有什么關系呢,安裝再刪除一共也影響不了幾秒鐘。

但重點是A中有這樣一個腳本命令:postinstall:npm run externals該命令是為了在開發時安裝依賴等場景可以自動執行externals以減少操作次數&降低學習成本。

這就會導致第一次執行externals的時候實際使用的是冗余的穩定版本B,而非我們需要的最外層的B@beta,所以還需要刪掉冗余依賴然后額外執行一次externals,這才是最耗時的部分。

“要是在npm i的時候可以不執行postinstall就好了”,帶著這個期許,我找到了一個好用的參數——--ignore-scripts(忽略依賴中的腳本命令,不去執行任何腳本)

npm i A@beta --ignore-scripts

這樣一來,在安裝A的時候,也不會額外執行externals命令了!

「優化前后編譯耗時對比:」

項目名

優化前編譯耗時

優化后編譯耗時

A

10:08

04:42

B

10:38

04:17

總結

以上,就是在對魔方基礎依賴環境隔離改造的思路和問題的解決:

  1. 通過發布beta版本的包來區分測試環境與線上環境
  2. 但是帶來了編譯速度嚴重下降的問題
  3. 通過去掉B中的依賴項來避免安裝冗余的依賴
  4. 針對A,在npm i的使用加入--ignore-scripts命令來避免額外執行打包命令externals
責任編輯:武曉燕 來源: 大轉轉FE
相關推薦

2022-05-24 21:19:50

微隔離云安全

2020-11-03 08:21:23

小程序

2010-11-23 13:56:46

伊頓云計算

2023-06-07 16:32:10

Python開發虛擬環境

2024-09-26 00:01:00

Java類隔離規避依賴沖突

2020-06-08 10:51:30

零信任零信任網絡微隔離

2021-01-07 10:18:03

Redis數據庫環境搭建

2022-09-01 08:50:22

kubernetes容器

2010-03-30 09:04:26

Silverlight依賴屬性附加屬性

2009-11-30 16:47:18

微軟

2020-01-18 09:04:29

微隔離安全隔離漏洞

2018-11-06 12:08:09

容器負載均衡云計算

2017-07-04 17:35:46

微服務架構Spring Clou

2016-09-08 15:07:06

虛擬化

2025-01-13 08:04:11

VSCode插件Python

2019-07-15 15:42:50

PythonPipx開源

2010-06-20 13:53:08

IP城域網

2010-03-10 16:05:27

2012-01-11 09:47:10

2020-10-17 09:48:55

Spinnaker實踐
點贊
收藏

51CTO技術棧公眾號

亚洲国产精品无码观看久久| 99久久精品免费看国产一区二区三区| 国产熟妇久久777777| 韩国成人动漫| 国产亚洲污的网站| 久久综合国产精品台湾中文娱乐网| 搡的我好爽在线观看免费视频| 草莓福利社区在线| 成人动漫视频在线| 青青草99啪国产免费| 亚洲天堂精品一区| 日本精品在线播放| 欧美日韩美女视频| 手机看片福利永久国产日韩| 精品人妻午夜一区二区三区四区 | 久久久精品视频免费观看| 韩国精品福利一区二区三区| 色八戒一区二区三区| 最新国产精品久久| 日韩在线观看视频一区二区三区| 日日欢夜夜爽一区| 欧美精品少妇videofree| 国产二级一片内射视频播放| 激情久久99| 香蕉av福利精品导航| 视频在线精品一区| 婷婷五月综合久久中文字幕| 久久国产精品一区二区| 韩国欧美亚洲国产| 成人一级黄色大片| 国产精品入口久久| 亚洲精品一区在线观看| 日日干夜夜操s8| 一个人www视频在线免费观看| 亚洲视频网在线直播| 国产不卡一区二区在线观看| 91精品国产高清一区二区三密臀| 91精品蜜臀一区二区三区在线| 欧美精品一区二区三| 热久久精品国产| 日本在线观看高清完整版| 欧美国产综合一区二区| 久久久av水蜜桃| 性猛交xxxx乱大交孕妇印度| 日韩福利视频导航| 日韩av三级在线观看| 国产无套在线观看| 国模吧视频一区| 久久天天躁狠狠躁夜夜av| 91网站免费入口| 日韩精选在线| 亚洲成人免费在线视频| 日本一区二区三区在线免费观看| 精品日韩视频| 一本色道a无线码一区v| 成年人网站国产| 午夜成年人在线免费视频| 国产精品伦一区二区三级视频| 久久综合狠狠综合久久综青草 | 欧美成人影院| 精品久久香蕉国产线看观看亚洲| 国产乱子伦精品无码专区| 黄色网址在线免费观看| 国产精品第五页| 亚洲国产精品www| 东凛在线观看| 国产精品久久国产精麻豆99网站| 日韩精品不卡| 成人在线观看黄色| 国产精品伦一区二区三级视频| 亚洲国产欧美日韩| 91在线品视觉盛宴免费| 中文字幕av在线一区二区三区| 日韩.欧美.亚洲| porn视频在线观看| 国产精品不卡在线| 视频一区国产精品| 日本在线观看免费| ...xxx性欧美| 欧美成人自拍视频| 国产区二精品视| 一区二区三区免费观看视频| 久久精品国产精品亚洲红杏| 成人有码在线视频| 亚洲av无码乱码国产精品| 国产成人亚洲综合色影视| 51精品国产人成在线观看| 精品国产区一区二| www.欧美色图| 日本成人三级电影网站| 福利成人在线观看| 亚洲美女淫视频| 蜜臀精品一区二区| 成人动漫一区| 欧美日本韩国一区二区三区视频 | 日本免费在线播放| 先锋影音久久久| 国产精品27p| 国产精品视频一区二区三区,| 国产不卡在线视频| 久久99精品久久久久久青青日本| 久久综合九色综合久| 国产精品久久久久久久岛一牛影视| 国产在线xxxx| 女生影院久久| 91精品国产综合久久久久久| 黄色污在线观看| 精品国产日韩欧美| 欧美大奶子在线| 秋霞av一区二区三区| 国产乱子伦一区二区三区国色天香| 国产精品一区视频| аⅴ资源新版在线天堂| 亚洲一区欧美一区| 欧美性猛交xxx乱久交| 精品伊人久久| 亚洲视频视频在线| 久久久久噜噜噜亚洲熟女综合| 亚洲欧美日韩视频二区| 亚洲一区美女视频在线观看免费| 亚洲日本国产精品| 国产精品久久一卡二卡| 蜜臀av无码一区二区三区| 四虎国产精品免费久久5151| 亚洲国产日韩精品在线| 少妇视频一区二区| 国产精品日韩久久久| 91亚洲精品一区二区| 欧美日韩在线中文字幕| 亚洲精品第一国产综合野| 九九热在线免费| 在线观看视频一区二区三区| 在线精品视频视频中文字幕| 日韩成人免费在线观看| 国产一区二区电影| 一级日韩一区在线观看| 黄色成人免费网| 亚洲第一免费播放区| 在线看的片片片免费| 热久久久久久久| 精品日本一区二区三区在线观看| 综合图区亚洲| 欧美精三区欧美精三区 | 91婷婷韩国欧美一区二区| 四虎永久国产精品| 阿v视频在线观看| 日韩一区二区在线观看| 无码少妇精品一区二区免费动态| 国产精品五区| 91大片在线观看| 老司机在线永久免费观看| 91福利在线导航| 国产传媒第一页| 国产日韩一区二区三区在线| 国产乱码一区| 毛片在线导航| 欧美xxxx在线观看| 久草视频在线免费看| 国产老肥熟一区二区三区| 日韩最新中文字幕| 国产精品1区| 欧美另类第一页| av无码精品一区二区三区宅噜噜| 日韩一区在线免费观看| 在线看免费毛片| 一区二区三区网站 | 欧美久久亚洲| 欧美国产视频日韩| 人妻妺妺窝人体色www聚色窝| 亚洲综合在线视频| 美女流白浆视频| 欧美激情理论| 鬼打鬼之黄金道士1992林正英| 欧美人与动牲性行为| 精品国产免费久久| 国产成人亚洲精品自产在线| 99久久精品国产一区二区三区 | 国产视频不卡在线| 看国产成人h片视频| 一级一片免费播放| h1515四虎成人| 亚洲一区二区黄| 伊人网免费视频| 亚洲图片激情小说| 国产精品日日摸夜夜爽| 欧美日韩福利| 成人写真视频福利网| 国产日产一区二区| 亚洲精品国产拍免费91在线| 亚洲综合成人av| 亚洲素人一区二区| 久久久久亚洲无码| 日韩国产在线一| 日本黄色a视频| 99这里只有精品视频| 啪一啪鲁一鲁2019在线视频| www.成人.com| 精品国偷自产国产一区| jizz国产在线观看| 亚洲欧美日本韩国| 亚洲精品理论片| 精品一区二区三区免费观看| 国产曰肥老太婆无遮挡| 精品大片一区二区| 国产精品亚洲不卡a| 日本一区免费网站| 欧美激情久久久久久| 国产高清免费在线播放| 日韩一区二区在线看片| 久久青青草原亚洲av无码麻豆| 欧美国产欧美综合| 中文字幕在线视频精品| 亚洲日本国产| 中文字幕av日韩精品| 嫩草国产精品入口| 91九色视频在线| 毛片免费看不卡网站| 欧美国产一区二区三区| 伊人免费在线| 亚洲欧美中文字幕| 亚洲精品久久久久久久久久久久久久| 色8久久精品久久久久久蜜| 欧美精品一区二区蜜桃| 欧美激情一二三区| 四虎永久免费影院| 成人综合婷婷国产精品久久蜜臀 | 成人不卡视频| 91成人精品网站| 五月天激情在线| 日韩中文字幕视频在线| 亚洲欧美激情另类| 91精品在线麻豆| 久久这里只有精品9| 五月天网站亚洲| 免费无码毛片一区二区app| 国产精品网站导航| 中文字幕人妻一区二区| 成人黄色a**站在线观看| 天天综合成人网| 欧美aaa在线| 国产精品第12页| 99伊人成综合| 国产69精品久久久久999小说| 欧美在线免费| 天天综合五月天| 婷婷综合久久| 亚洲自拍偷拍一区二区三区| 日本高清免费电影一区| 九九九热999| 中文字幕av一区二区三区四区| 日本a级片电影一区二区| 久久人体大尺度| 国产精品99一区| 欧美大胆成人| 国产精品91久久久久久| 国产精品久久久久av电视剧| 日本精品视频在线观看| 国产高清不卡| 国产成人欧美在线观看| japanese23hdxxxx日韩| 国产精品777| 日本精品久久| 成人免费黄色网| 欧美日韩黄网站| 99久久一区三区四区免费| 清纯唯美激情亚洲| 国产在线精品一区二区三区| silk一区二区三区精品视频| 91精品综合久久| 加勒比久久高清| 久久久久国产精品视频| 久久99青青| 亚洲人体一区| 欧美一区高清| 成人免费性视频| 99国产精品| 亚洲中文字幕久久精品无码喷水| 日韩精品高清不卡| 制服丝袜中文字幕第一页 | 精品人妻一区二区三区日产| 99久久精品国产导航| 90岁老太婆乱淫| 国产精品白丝在线| 久久精品亚洲无码| 91黄色在线观看| 波多野结衣影片| 91精品国产91热久久久做人人| 亚洲成人黄色片| 亚洲精品999| 国产永久免费高清在线观看| 国产亚洲成精品久久| 久草免费在线| 98视频在线噜噜噜国产| 精品免费av在线| 超碰97在线播放| 九九综合九九| 国产日本欧美在线| 国产精品婷婷| 欧美激情国内自拍| 91视频免费播放| 国产极品美女在线| 午夜欧美视频在线观看| 国产女优在线播放| 日韩免费视频线观看| 人妻少妇精品无码专区| 亚洲视频在线看| 美洲精品一卡2卡三卡4卡四卡| 国产91精品在线播放| 欧一区二区三区| 日产精品一线二线三线芒果| 欧美三区美女| 天天操,天天操| 91视频www| 久草中文在线视频| 欧美日韩久久不卡| 日本一区高清| 欧美成年人视频| 成人黄页网站视频| 狠狠色伊人亚洲综合网站色| 99久久夜色精品国产亚洲狼| 久久精品.com| 成人激情小说乱人伦| 91香蕉视频在线播放| 亚洲一区二区五区| 国产不卡av在线播放| 一本色道久久88亚洲综合88| 岛国片av在线| 亚洲影院在线看| 久久精品国产大片免费观看| 日日摸日日碰夜夜爽av| 成人精品在线视频观看| 国产日韩欧美在线观看视频| 日本精品视频一区二区三区| 手机av免费在线观看| 欧美成人黄色小视频| 国产精品久久久久久久久免费高清| 久久人人爽爽人人爽人人片av| 欧美午夜影院| 免费看的av网站| 国产精品久久网站| 中文字幕一区二区人妻| 亚洲欧美激情在线视频| 人人草在线视频| 国产女人水真多18毛片18精品| 午夜激情一区| 国产精品久久久久久久av福利| 国产日韩欧美综合在线| 黄色av网站免费观看| 精品一区精品二区| 在线观看欧美日韩电影| 精品蜜桃传媒| 99av国产精品欲麻豆| 中文字幕人妻一区二区三区| 亚洲欧美日韩国产综合在线| japanese国产在线观看| 日日骚久久av| 亚洲欧美在线综合| 国产精品亚洲天堂| 韩国成人福利片在线播放| 美女三级黄色片| 欧美日韩不卡一区| 黄网页在线观看| 97久久夜色精品国产九色| 欧美阿v一级看视频| 中文字幕 欧美 日韩| 亚洲一级二级三级在线免费观看| 国模私拍视频在线| 91精品国产自产91精品| 亚洲成人五区| 久久美女福利视频| 国产午夜一区二区三区| 亚洲天堂手机版| 超碰91人人草人人干| 高清欧美性猛交xxxx黑人猛| 国产av麻豆mag剧集| 久久久精品影视| 中文字幕无码乱码人妻日韩精品| 深夜福利国产精品| 精品国产乱码久久久久久樱花| a天堂资源在线观看| 国产成人免费视频网站| 久久精品国产亚洲av高清色欲 | 日韩精品一区二区在线视频| 99久久国产综合精品女不卡| aaa在线视频| 久久福利网址导航| 欧美国产极品| www.99在线| 一区二区不卡在线视频 午夜欧美不卡在| 蜜臀av免费在线观看| 国产精品极品美女在线观看免费 | 精品剧情v国产在线观看在线| 亚洲淫成人影院| 亚洲欧美国产精品桃花| 国产一区二区三区免费在线观看| 久久国产精品二区| 亚洲人成免费电影| 国产麻豆一区二区三区| 欧美 日本 亚洲| 国产精品毛片高清在线完整版|