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

前端:如何基于Node.JS從零構建線上自動化打包工作流?

開發 前端 自動化
NodeJS在前端領域正扮演著越越重要的地位,它不僅可以讓前端工作者使用javascript編寫后端代碼,還能方便地搭建響應速度快、易于擴展的網絡應用。Node.js 使用事件驅動,非阻塞I/O 模型而得以輕量和高效,非常適合在分布式設備上運行數據密集型的實時應用。

前言

NodeJS在前端領域正扮演著越越重要的地位,它不僅可以讓前端工作者使用javascript編寫后端代碼,還能方便地搭建響應速度快、易于擴展的網絡應用。Node.js 使用事件驅動,非阻塞I/O 模型而得以輕量和高效,非常適合在分布式設備上運行數據密集型的實時應用。

[[417435]]

所以作為一名優秀的前端工程師,非常有必要了解和掌握Node.js。筆者接下來將通過對H5-Dooring項目中的實時在線下載代碼功能來帶大家掌握如何從零構建線上自動化打包工作流。

你將收獲

  • 設計一款在線工作流的基本思路
  • nodejs常用API的使用
  • nodejs如何使用父子進程
  • 使用child_process的exec實現解析并執行命令行指令
  • http://socket.io實現消息實時推送
  • 使用jszip實現服務端壓縮文件并支持前端下載zip包

正文

我們都用過諸如gulp,webpack之類的自動化工具,他們能很方便地幫我們打包編譯代碼,并以一種相對優雅的方式編寫我們的工程代碼。但是我們仔細思考之后就能發現, 這些產物的背后都是靠nodejs和babel做底層支持。我們無非就是設計一種架構模式,通過babel的加載器和nodejs的服務能力,將代碼由JS - AST - JS的過程(這里忽略css和插件處理)。

 

前端:如何基于NodeJS從零構建線上自動化打包工作流?

 

在吹完牛逼之后,我們開始介紹如何設計一款在線工作流。

1. 設計一款在線工作流的基本思路

在線工作流是個泛指,其實任何產品線都有屬于自己特色的工作流,但最終還是要回歸業務。所以筆者在這里專門介紹一下H5-Dooring的實時下載代碼的在線工作流。我們看看下面的設計流程:

 

前端:如何基于NodeJS從零構建線上自動化打包工作流?

 

以上就是我們需要做的在線實時打包下載代碼的工作流,由于nodejs是單線程的,為了不阻塞進程我們可以采用父子進程通信的方式和異步模型來處理復雜耗時任務,為了通知用戶任務的完成狀況, 我們可以用socket做雙向通信。在當前的場景下就是代碼編譯壓縮完成之后,通知給瀏覽器,以便瀏覽器顯示下載狀態彈窗。一共有三種狀態:進行中,已完成,失敗。對應如下圖所示界面:

 

前端:如何基于NodeJS從零構建線上自動化打包工作流?

 

H5-Dooring

 

前端:如何基于NodeJS從零構建線上自動化打包工作流?

 

H5-Dooring

至于為什么沒有出現下載失敗的狀態,不要問我,問就是沒有失敗過(完了,找虐了)。

以上就是H5-Dooring實時編譯下載的工作流設計,至于線上更多的實際需求,我們也可以參考以上設計去實現,接下來筆者來具體介紹實現過程。

2.nodejs如何使用父子進程

我們要想實現一個自動化工作流, 要考慮的一個關鍵問題就是任務的執行時機以及以何種方式執行. 因為用戶下載代碼之前需要等H5頁面打包編譯壓縮完成之后才能下載, 而這個過程需要一定的時間(8-30s), 所以我們可以認定它為一個耗時任務.

當我們使用nodejs作為后臺服務器時, 由于nodejs本身是單線程的,所以當用戶請求傳入nodejs時, nodejs不得不等待這個"耗時任務"完成才能進行其他請求的處理, 這樣將會導致頁面其他請求需要等待該任務執行結束才能繼續進行, 所以為了更好的用戶體驗和流暢的響應,我們不得不考慮多進程處理. 好在nodejs設計支持子進程, 我們可以把耗時任務放入子進程中來處理,當子進程處理完成之后再通知主進程. 整個流程如下圖所示:

 

前端:如何基于NodeJS從零構建線上自動化打包工作流?

 

nodejs有3種創建子進程的方式,這里筆者簡單介紹一下fork的方式。使用方式如下:

 

  1. // child.js 
  2. function computedTotal(arr, cb) { 
  3.     // 耗時計算任務 
  4.  
  5. // 與主進程通信 
  6. // 監聽主進程信號 
  7. process.on('message', (msg) => { 
  8.   computedTotal(bigDataArr, (flag) => { 
  9.     // 向主進程發送完成信號 
  10.     process.send(flag); 
  11.   }) 
  12. }); 
  13.  
  14. // main.js 
  15. const { fork } = require('child_process'); 
  16.  
  17. app.use(async (ctx, next) => { 
  18.   if(ctx.url === '/fetch') { 
  19.     const data = ctx.request.body; 
  20.     // 通知子進程開始執行任務,并傳入數據 
  21.     const res = await createPromisefork('./child.js', data) 
  22.   } 
  23.  
  24.   // 創建異步線程 
  25.   function createPromisefork(childUrl, data) { 
  26.     // 加載子進程 
  27.     const res = fork(childUrl) 
  28.     // 通知子進程開始work 
  29.     data && res.send(data) 
  30.     return new Promise(reslove => { 
  31.         res.on('message', f => { 
  32.             reslove(f) 
  33.         }) 
  34.     })   
  35.   } 
  36.  
  37.   await next() 
  38. }) 

 

在H5-Dooring線上打包的工作流中,我們會用到child_process的exec方法,來解析并執行命令行指令。至于父子進程的更多應用,大家可以自行探索。

3. 使用child_process的exec實現解析并執行命令行指令

在上面介紹的dooring工作流中,我們知道為了實現實時打包,我們需要一個H5 Template項目,作為打包的母版,當用戶點擊下載時,會將頁面的json schema數據傳給node服務器, node服務器再將json schema進行數據清洗最后生成template.json文件并移動到H5 Template母版中,此時母版拿到數據源并進行打包編譯,最后生成可執行文件。

以上的過程很關鍵, 這里筆者畫個大致的流程圖:

 

前端:如何基于NodeJS從零構建線上自動化打包工作流?

 

H5-Dooring

為了實現以上過程,我們需要兩個關鍵環節: 1. 將用戶配置的數據進行處理并生成json文件,然后移動到H5 Template母版中 2. 在母版中自動執行打包編譯腳本

第一個環節很好實現,我們只需要用nodejs的fs模塊生成文件到指定目錄即可,這里筆者重點介紹第二個環節的實現。

當我們將json數據生成到H5 Template中之后,就可以進行打包了,但是這個過程需要自動化地去處理,不能像我們之前啟動項目一樣,手動執行npm start或者yarn start。我們需要程序自動幫我們執行這個命令行指令,筆者在查nodejs API突然發現了child_process的exec方法,可以用來解析指令,這個剛好能實現我們的需求,所以我們開始實現它。代碼如下:

 

  1. import { exec } from 'child_process' 
  2. const outWorkDir = resolve(__dirname, '../h5_landing'
  3. const fid = uuid(8, 16) 
  4. const cmdStr = `cd ${outWorkDir} && yarn build ${fid}` 
  5.  
  6. // ...exec相關代碼 
  7. const filePath = resolve(__dirname, '../h5_landing/src/assets/config.json'
  8. const res = WF(filePath, data) 
  9.  
  10. exec(cmdStr, function(err,stdout,stderr){ 
  11.   if(err) { 
  12.     // 錯誤處理 
  13.   } else { 
  14.     // 成功處理 
  15.   } 
  16. }) 

 

以上代碼我們不難理解,我們只需要定義好打包的指令字符串(方式和命令行操作幾乎一致),然后傳入給exec的第一個參數,他就會幫我們解析字符串并執行對應的命令行指令。在執行完成之后,我們可以根據回調函數(第二個參數)里的參數值來判斷執行結果。整個過程是異步的,所以我們不用擔心阻塞問題,為了實時反饋進度,我們可以用socket來將進度信息推送到瀏覽器端。

4.http://socket.io實現消息實時推送

在上面介紹的 exec實現解析并執行命令行指令 中還有一些細節可以優化,比如代碼執行進程的反饋,執行狀態的反饋。因為我們用的是異步編程,所以請求不會一直等待,如果不采取任何優化措施,用戶是不可能知道何時代碼打包編譯完成, 也不知道代碼是否編譯失敗,所以這個時候會采取幾種常用的方案: 客戶端請求長輪詢 postmessage消息推送 * websocket雙向通信

很明顯使用websocket雙向通信會更適合本項目。這里我們直接使用社區比較火的http://socket.io.由于官網上有很多使用介紹,這里筆者就不一一說明了。我們直接看業務里的代碼使用:

 

  1. // node端 
  2. exec(cmdStr, function(err,stdout,stderr){ 
  3.   if(err) { 
  4.     console.log('api error:'+stderr); 
  5.     io.emit('htmlFail', { result: 'error', message: stderr }) 
  6.   } else { 
  7.     io.emit('htmlSuccess', { result: dest, message: stderr }) 
  8.   } 
  9. }) 
  10.  
  11. // 瀏覽器端 
  12. const socket = io(serverUrl); 
  13. // ...省略其他業務代碼 
  14. useEffect(() => { 
  15.   socket.on('connect'function(){ 
  16.     console.log('connect'
  17.   }); 
  18.   socket.on('htmlFail'function(data){ 
  19.     // ... 
  20.   }); 
  21.   socket.on('disconnect'function(e){ 
  22.     console.log('disconnect', e) 
  23.   }); 
  24. }, []) 

 

這樣我們就能實現服務器任務流的狀態實時反饋給瀏覽器端了。

5. 使用jszip實現服務端壓縮文件并支持前端下載zip包

實現前端下載功能其實也很簡單,因為用戶配置的H5項目包含了各種資源,比如css,js,html,image,所以為了提高下載性能和便捷性我們需要把整個網站打包,生成一個zip文件供用戶下載。原理就是使用jszip將目錄壓縮,然后返回壓縮后的路徑給到前端,前端采用a標簽進行下載。至于如何實現目錄遍歷壓縮和遍歷讀取目錄, 這里筆者就不說了,感興趣的可以參考筆者其他的nodejs的文章。

6. 總結

以上教程筆者已經集成到H5-Dooring中,對于一些更復雜的交互功能,通過合理的設計也是可以實現的,大家可以自行探索研究。

 

瀏覽器搜索:H5-Dooring

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2023-07-21 15:26:00

數據庫同步數據

2022-12-16 21:58:20

NodeJSH5zip

2024-05-17 08:39:11

Node.js前端非阻塞I/O 模型

2021-05-05 11:36:31

Node前端自動化熱重載頁面

2012-09-29 11:13:15

Node.JS前端開發Node.js打包

2022-07-14 08:16:24

Node.js后端自動化測試

2022-08-22 07:26:32

Node.js微服務架構

2013-09-03 09:58:51

Web前端

2021-04-02 09:00:00

Node.js開發工具

2024-04-15 08:00:00

人工智能DevOps

2022-09-12 15:58:50

node.js微服務Web

2022-07-14 10:06:20

工作流引擎營銷自動化vivo

2023-01-10 14:11:26

2011-09-09 14:23:13

Node.js

2021-07-09 00:24:10

No.jsNode.js原理

2015-07-21 16:23:22

Node.js構建分布式

2021-12-25 22:29:57

Node.js 微任務處理事件循環

2022-03-07 11:09:36

自動化企業技術

2025-11-03 08:00:00

2023-01-31 16:43:31

?Node.js事件循環
點贊
收藏

51CTO技術棧公眾號

国产精品第56页| 亚洲精品一二三四| 黄色网页在线免费看| 国产精品一区二区三区网站| 韩国视频理论视频久久| 尤物视频最新网址| 精品国产伦一区二区三区观看说明 | 欧美重口另类videos人妖| 日韩女同一区二区三区| 国产专区精品| 色呦呦一区二区三区| 中文字幕一区二区三区在线乱码 | 久久久久久久久久久99| 超碰国产在线| 99在线精品视频| 91九色在线视频| 国内自拍视频在线播放| 欧美黄色免费| 夜夜嗨av色一区二区不卡| 四川一级毛毛片| 欧洲成人一区| 欧美日韩精品在线观看| 五月天激情图片| 在线观看麻豆蜜桃| 久久久久久97三级| 国产亚洲欧美一区二区| 国产免费黄色录像| 免费人成精品欧美精品| 热99精品只有里视频精品| 免费日韩在线视频| 亚洲激情五月| 在线视频精品一| 日本aaa视频| 精品国产乱子伦一区二区| 日韩一区和二区| 日本中文字幕片| а√天堂8资源在线| 一区二区三区在线影院| 亚洲一区二区三区免费看| 日产精品久久久久久久性色| 成人免费三级在线| 国产传媒欧美日韩| www.五月婷| 国产高清亚洲一区| 亚洲综合第一页| 国产视频在线观看视频| 久草这里只有精品视频| 国产欧美亚洲精品| 一级爱爱免费视频| 另类小说一区二区三区| 国产精品自产拍在线观| 最新在线中文字幕| 美腿丝袜在线亚洲一区| 国产精品自在线| 又骚又黄的视频| 久久电影网站中文字幕| 国产区精品视频| 亚洲综合精品在线| 韩国精品免费视频| 4444kk亚洲人成电影在线| 国产黄色美女视频| 成人丝袜视频网| 国产一区二区精品免费| 亚洲aⅴ乱码精品成人区| proumb性欧美在线观看| 久久精品欧美| porn亚洲| 综合久久一区二区三区| 日本一区二区三区四区五区六区| 国产网友自拍视频导航网站在线观看| 亚洲免费色视频| 国产91在线亚洲| 2020国产在线| 欧美性色19p| 少妇一级淫免费播放| 国产美女亚洲精品7777| 亚洲国产精彩中文乱码av在线播放 | 国产精品第5页| 日本视频一区二区三区| 91色p视频在线| 黄色av一区二区三区| 91麻豆精品在线观看| 四虎一区二区| 羞羞污视频在线观看| 午夜精品久久久久久久99樱桃| 91国视频在线| a一区二区三区亚洲| 337p日本欧洲亚洲大胆精品 | 乌克兰美女av| 136福利精品导航| 日韩精品在线第一页| 亚洲一二三四五六区| 欧美天天视频| 国产精品91久久久久久| av一级黄色片| 久久久影视传媒| 伊人再见免费在线观看高清版| 91福利区在线观看| 欧美三电影在线| 性色av蜜臀av浪潮av老女人| 精品免费在线| 97成人超碰免| 国产又粗又大又爽| 26uuu成人网一区二区三区| 杨幂一区欧美专区| 电影在线观看一区| 在线播放/欧美激情| 久久久久久久久免费看无码| 国产精品成人a在线观看| 26uuu久久噜噜噜噜| 国产精品爽爽久久| 国产亚洲人成网站| 久久人人爽人人爽人人av| 欧美大片1688网站| 日韩精品视频在线观看网址| 亚洲波多野结衣| 日韩**一区毛片| 精品国产乱码久久久久久蜜柚 | 成人欧美一区二区三区白人| 国产自产在线视频| 久久久91麻豆精品国产一区| 国产午夜精品免费一区二区三区 | 特级毛片在线| 欧美午夜精品久久久| 亚洲av无码一区二区三区网址 | 国内精品偷拍视频| 中文字幕成人av| 国产肥臀一区二区福利视频| 亚洲免费一区三区| 久久精品91久久香蕉加勒比| 亚洲男人天堂网址| 久久一日本道色综合| 六月婷婷在线视频| 9999久久久久| 欧美成人高清视频| 国产理论片在线观看| 国产精品午夜电影| 无码少妇一区二区三区芒果| 伦理一区二区三区| 久久久中文字幕| www国产在线| 一区二区三区久久| 日韩高清一二三区| 亚洲婷婷在线| 国产久一道中文一区| 天堂av在线电影| 欧美mv日韩mv国产| 日产亚洲一区二区三区| 成人va在线观看| 97视频久久久| 日韩精品社区| 日韩av免费在线看| 国产免费av高清在线| 色国产综合视频| 精品成人无码一区二区三区| 久久精品人人| 亚欧洲精品在线视频免费观看| 国模视频一区| 中文字幕亚洲情99在线| 一级特黄色大片| 成人免费一区二区三区在线观看| 亚洲欧美天堂在线| 欧美另类专区| 精品久久久久久一区二区里番| 午夜激情电影在线播放| 亚洲一区二区精品| 国产又爽又黄免费软件| 亚洲男人天堂一区| 黄色性视频网站| 久久精品日韩欧美| 一区精品在线| 精品久久久久久久免费人妻| 午夜激情福利电影| 久久精品国产99国产精品| 一区精品在线| 一区二区三区四区视频免费观看| 国精产品一区一区三区有限在线| 四虎永久在线观看| 色婷婷综合久久| 亚洲精品国产精品国自| 激情深爱一区二区| 成人午夜免费在线| 欧美猛男同性videos| 国产欧美日韩最新| 国产网红在线观看| 亚洲男人天堂久| 国产又黄又猛又爽| 懂色av中文一区二区三区天美 | 一级aaaa毛片| 亚洲网友自拍偷拍| 午夜时刻免费入口| 国产九九视频一区二区三区| 久久国产精品视频在线观看| 国产影视一区| 99在线观看视频网站| 成人片免费看| 美女啪啪无遮挡免费久久网站| 少妇高潮一区二区三区99小说| 日本道精品一区二区三区| 久久久久99精品成人片试看| 久久久99久久| 女同性αv亚洲女同志| 三级一区在线视频先锋| 日韩一区二区高清视频| 欧美精品羞羞答答| 国产九区一区在线| 国产视频一区二区在线播放| 欧洲亚洲妇女av| 免费网站在线观看人| 日韩中文字幕在线视频播放| 四虎精品一区二区三区| 日韩视频一区二区三区| 波多野结衣在线观看视频| 亚洲午夜久久久久中文字幕久| 免费一级特黄3大片视频| 成人黄色小视频在线观看| 亚洲小视频网站| 丝袜脚交一区二区| 69堂免费视频| 亚洲国产专区| 久久福利一区二区| 国产精品一国产精品| 国产麻豆乱码精品一区二区三区| 五月天色综合| 国产精品久久久久久久久| 人成在线免费网站| 欧美黑人性生活视频| 麻豆免费在线视频| 在线成人中文字幕| 国产在线观看网站| 亚洲另类图片色| 污污视频在线观看网站| 亚洲精品一区二区三区四区高清 | 国产91精品一区二区麻豆亚洲| youjizzxxxx18| 日韩精品亚洲专区| 国产精品动漫网站| 亚洲欧美清纯在线制服| 男女视频网站在线观看| 欧美精品三区| 日韩中文字幕亚洲精品欧美| 五月天激情综合网| 中文字幕一区二区三区乱码| 日韩免费av| 亚洲视频sss| 99精品电影| 亚洲第一页在线视频| 天天做天天爱天天综合网2021| 日韩中文字幕一区二区| 日本大胆欧美| 日韩欧美精品在线不卡| 国产乱码精品一区二区亚洲| 欧美久久综合性欧美| 久久不见久久见中文字幕免费| 久中文字幕一区| 国产中文精品久高清在线不| 日本不卡二区| 色一区二区三区四区| 日本黄色播放器| 欧美在线视屏| 美女扒开大腿让男人桶| 99热这里只有精品8| 欧美色图另类小说| 日韩和欧美一区二区三区| 天天碰免费视频| 六月丁香婷婷久久| 香蕉网在线视频| 99国产精品视频免费观看| 国产精品高清无码在线观看| 日本一区免费视频| 黄色一级大片在线免费观看| 亚洲专区一二三| 黄色一级片免费在线观看| 91国模大尺度私拍在线视频| 亚洲性在线观看| 亚洲成人动漫在线播放| 久久精品国产亚洲a∨麻豆| 综合国产在线观看| 先锋影音在线资源站91| 欧美夜福利tv在线| 国产精品原创视频| 国产伦精品一区二区三区免| 久久99国产精品视频| 中文字幕第一页亚洲| 亚洲一级一区| 欧美 日韩 国产 激情| 国产综合久久久久久久久久久久| av电影在线播放| 久久精品人人做人人爽人人| 一级性生活免费视频| 亚洲成av人片在线观看无码| 国产第一页在线观看| 91精品国产欧美一区二区| 亚洲 另类 春色 国产| 精品国产一区久久久| 在线能看的av网址| 97中文在线观看| 精品国产一区二区三区噜噜噜| 日韩亚洲欧美一区二区| 久久久xxx| 亚洲视频天天射| 国产精品蜜臀av| 亚洲黄色三级视频| 欧美一三区三区四区免费在线看 | 77成人影视| 亚洲综合欧美日韩| 美女久久网站| 国产性猛交96| 国产精品久99| 久久久黄色大片| 精品国产乱码久久久久久影片| 91精彩在线视频| 日本久久91av| 国产精品极品| 公共露出暴露狂另类av| 日本三级亚洲精品| 好吊日免费视频| 亚洲成a人在线观看| 97人妻一区二区精品免费视频| 精品亚洲国产视频| av在线视屏| 成人h视频在线观看| 国产精品久久久久久久免费观看 | www.99热这里只有精品| 国产在线一区观看| 久久一级免费视频| 在线观看日韩av先锋影音电影院| 天堂在线资源网| 久久久久九九九九| 欧美国产亚洲精品| 国产精品12p| 久久精品国产在热久久| 国产1区2区在线观看| 色综合久久久久综合体| 亚洲色偷精品一区二区三区| 色综合老司机第九色激情| 国产色99精品9i| 久久天天东北熟女毛茸茸| 激情文学综合丁香| 北条麻妃在线观看视频| 欧美日韩免费不卡视频一区二区三区| 免费在线看v| 国产精品pans私拍| 国精一区二区| 欧美特级aaa| 中文字幕中文字幕在线一区| 亚洲一区二区色| 日韩在线视频观看| 五月天色综合| 免费看黄色a级片| 懂色av中文一区二区三区 | 伊人久久久大香线蕉综合直播 | 91福利免费视频| www日韩欧美| 久久影院一区二区三区| 成人小视频在线观看免费| 成人一级片在线观看| 日韩美女黄色片| 亚洲精品影视在线观看| 欧美成人精品三级网站| 色一情一区二区三区四区| 精品影视av免费| 欧美成人精品欧美一级私黄| 精品蜜桃在线看| 五月天国产在线| 亚洲视频精品一区| 国产精品一区二区三区乱码| 久青草免费视频| 亚洲精品视频网上网址在线观看| 偷拍中文亚洲欧美动漫| 久久久一二三四| 成人在线一区二区三区| 一级黄色大片视频| 日日摸夜夜添一区| 99热这里只有精品首页| 激情综合网婷婷| 亚洲人成小说网站色在线 | 美国十次综合久久| 你真棒插曲来救救我在线观看| 91老师国产黑色丝袜在线| 亚洲精品国产欧美在线观看| 久久人人爽人人爽爽久久| 老牛精品亚洲成av人片| av视屏在线播放| 亚洲免费在线观看| 男人天堂资源在线| 91亚洲午夜在线| 国产日韩免费| 免费三级在线观看| 亚洲欧美精品在线| 久久久精品区| 成人免费视频久久| 一区二区在线免费| 电影av在线| 粉嫩av一区二区三区免费观看| 性色一区二区| 九九视频免费看| 色999日韩欧美国产| 操欧美女人视频| 一路向西2在线观看|