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

基于Node.js從零構建自動化出碼工作流

開發(fā) 前端
Node.js 使用事件驅動,非阻塞I/O 模型而得以輕量和高效,非常適合在分布式設備上運行數據密集型的實時應用。

前言

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

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

你將收獲

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

正文

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

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

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

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

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

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

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

2. Node.js如何使用父子進程

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

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

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

// child.js
function computedTotal(arr, cb) {
    // 耗時計算任務
}

// 與主進程通信
// 監(jiān)聽主進程信號
process.on('message', (msg) => {
  computedTotal(bigDataArr, (flag) => {
    // 向主進程發(fā)送完成信號
    process.send(flag);
  })
});

// main.js
const { fork } = require('child_process');

app.use(async (ctx, next) => {
  if(ctx.url === '/fetch') {
    const data = ctx.request.body;
    // 通知子進程開始執(zhí)行任務,并傳入數據
    const res = await createPromisefork('./child.js', data)
  }
  // 創(chuàng)建異步線程
  function createPromisefork(childUrl, data) {
    // 加載子進程
    const res = fork(childUrl)
    // 通知子進程開始work
    data && res.send(data)
    return new Promise(reslove => {
        res.on('message', f => {
            reslove(f)
        })
    })
  }
  
  await next()
})
復制代碼

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

3. 使用child_processexec實現解析并執(zhí)行命令行指令

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

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

為了實現以上過程,我們需要兩個關鍵環(huán)節(jié):

  • 將用戶配置的數據進行處理并生成json文件,然后移動到H5 Template母版中
  • 在母版中自動執(zhí)行打包編譯腳本

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

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

import { exec } from 'child_process'
const outWorkDir = resolve(__dirname, '../h5_landing')
const fid = uuid(8, 16)
const cmdStr = `cd ${outWorkDir} && yarn build ${fid}`

// ...exec相關代碼
const filePath = resolve(__dirname, '../h5_landing/src/assets/config.json')
const res = WF(filePath, data)

exec(cmdStr, function(err,stdout,stderr){
  if(err) {
    // 錯誤處理
  } else {
    // 成功處理
  }
})
復制代碼

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

4. socket.io實現消息實時推送

在上面介紹的 exec實現解析并執(zhí)行命令行指令 中還有一些細節(jié)可以優(yōu)化,比如代碼執(zhí)行進程的反饋,執(zhí)行狀態(tài)的反饋。因為我們用的是異步編程,所以請求不會一直等待,如果不采取任何優(yōu)化措施,用戶是不可能知道何時代碼打包編譯完成, 也不知道代碼是否編譯失敗,所以這個時候會采取幾種常用的放案:

  • 客戶端請求長輪詢
  • postmessage消息推送
  • websocket雙向通信

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

// node端
exec(cmdStr, function(err,stdout,stderr){
  if(err) {
    console.log('api error:'+stderr);
    io.emit('htmlFail', { result: 'error', message: stderr })
  } else {
    io.emit('htmlSuccess', { result: dest, message: stderr })
  }
})

// 瀏覽器端
const socket = io(serverUrl);
// ...省略其他業(yè)務代碼
useEffect(() => {
  socket.on('connect', function(){
    console.log('connect')
  });
  socket.on('htmlFail', function(data){
    // ...
  });
  socket.on('disconnect', function(e){
    console.log('disconnect', e)
  });
}, [])
復制代碼

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

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

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

6. 總結

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

體驗地址: https://dooring.vip。

責任編輯:姜華 來源: 趣談前端
相關推薦

2021-08-13 14:00:14

Node.js開發(fā)前端

2023-07-21 15:26:00

數據庫同步數據

2022-12-16 21:58:20

NodeJSH5zip

2022-07-14 08:16:24

Node.js后端自動化測試

2023-01-10 14:11:26

2021-07-09 00:24:10

No.jsNode.js原理

2021-12-25 22:29:57

Node.js 微任務處理事件循環(huán)

2022-08-22 07:26:32

Node.js微服務架構

2021-05-05 11:36:31

Node前端自動化熱重載頁面

2021-04-02 09:00:00

Node.js開發(fā)工具

2024-04-15 08:00:00

人工智能DevOps

2022-09-12 15:58:50

node.js微服務Web

2025-04-29 08:00:00

Rowboat多智能體人工智能

2013-03-28 14:54:36

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發(fā)指南基礎介紹

2022-07-14 10:06:20

工作流引擎營銷自動化vivo

2023-04-18 15:18:10

2020-09-28 06:57:39

Node.jsGraphQLAPI

2015-07-21 16:23:22

Node.js構建分布式
點贊
收藏

51CTO技術棧公眾號

欧美污视频久久久| 国产精品久久久久久久久久东京| 男人操女人下面视频| 黄色美女视频在线观看| 久久久欧美精品sm网站| 成人性生交大片免费观看嘿嘿视频| 日韩成人毛片视频| 欧洲精品一区| 91精品国产福利| 日韩av片在线看| 成年人网站在线| 久久综合中文字幕| 亚洲xxxx18| 中文字幕一区二区三区四区欧美| 你懂的一区二区| 一道本无吗dⅴd在线播放一区 | 亚洲天堂2020| 樱花草www在线| 国产精品扒开腿做爽爽爽视频软件| 亚洲四区在线观看| 国产在线精品一区二区三区》| 中文在线字幕av| 亚洲黄色在线| 久久综合色88| 亚洲精品国产精品国自| 日本福利一区| 精品国产91九色蝌蚪| 在线观看免费视频高清游戏推荐| 涩涩视频在线免费看| 亚洲资源中文字幕| 中文字幕在线亚洲精品| 成年在线电影| 久久久久久久一区| 精品视频高清无人区区二区三区| 国产三级午夜理伦三级| 免费在线观看日韩欧美| 欧美中文字幕精品| 日本免费观看视| 国产综合精品| 欧美第一淫aaasss性| 国产喷水在线观看| 日韩欧美综合| 色妞欧美日韩在线| 欧美 日韩 国产 成人 在线观看| 神马久久影院| 亚洲毛片在线免费观看| 久久精品女同亚洲女同13| 99久久免费精品国产72精品九九| 欧美一区二区三区四区五区| 中文字幕亚洲欧洲| 四虎国产精品免费久久5151| 精品视频色一区| www.亚洲高清| 欧美天堂一区二区| 欧美日韩成人高清| 热久久久久久久久| 996久久国产精品线观看| 欧美日本在线播放| 亚洲三级在线视频| 91精品国产自产在线丝袜啪| 亚洲成人av中文字幕| 日批免费观看视频| 老牛国内精品亚洲成av人片| 日韩av在线免播放器| 成人免费av片| 日本午夜一区| 久久影院资源网| 免费毛片在线播放免费| 亚洲人成毛片在线播放女女| 2024亚洲男人天堂| 男操女视频网站| 九九国产精品视频| 成人av免费电影| 污视频在线免费| 国产欧美日韩三区| 看一级黄色录像| 17videosex性欧美| 91福利在线导航| 亚洲天堂伊人网| 国产一区二区三区不卡av| 日韩激情片免费| 亚洲一级片在线播放| 国产主播精品| 国产精品h在线观看| 国产又粗又猛视频| av网站免费线看精品| 日本一区二区三区在线视频 | 日韩最新在线| 在线精品视频视频中文字幕| 男人与禽猛交狂配| 亚洲综合欧美| 成人在线小视频| 午夜视频www| 中文字幕欧美一区| 欧美极品欧美精品欧美| 国产精品黄色片| 欧美成人三级电影在线| 无码国产69精品久久久久同性| 97精品视频在线看| 51久久精品夜色国产麻豆| 一二三四区在线| 99久久婷婷国产精品综合| 亚洲欧美久久234| 久久不射影院| 欧美人体做爰大胆视频| 少妇户外露出[11p]| 日韩精品诱惑一区?区三区| 国产做受高潮69| 亚洲一区二区视频在线播放| 99r精品视频| 青青草免费在线视频观看| 国产高清不卡| 欧美不卡视频一区| 日韩av网站在线播放| 久久国产精品99国产| 91影院未满十八岁禁止入内| 91官网在线| 色综合久久久久久久久久久| 图片区偷拍区小说区| 99久久.com| 国产精品av在线播放| 四虎精品成人影院观看地址| 一区二区三区免费观看| 爱爱爱爱免费视频| 少妇一区二区视频| 97精品伊人久久久大香线蕉| 精品人妻一区二区三区换脸明星| 日本一区二区三区久久久久久久久不| 久久精品视频16| eeuss鲁片一区二区三区| 菠萝蜜影院一区二区免费| 成人a v视频| 91在线视频免费观看| www.国产在线播放| 色悠久久久久综合先锋影音下载| 精品国产一区二区三区久久久| 波多野结衣视频免费观看| 91麻豆国产福利在线观看| 男的插女的下面视频| 中文字幕日韩在线| 欧美老女人在线视频| 国产又黄又粗又猛又爽| 中文字幕视频一区| 激情黄色小视频| 久久久久久久久久久妇女| 国产欧美精品在线播放| 日本三级视频在线观看| 欧美卡1卡2卡| 五月天婷婷色综合| 粉嫩蜜臀av国产精品网站| 成人在线观看毛片| 成人h动漫精品一区二区器材| 9色porny自拍视频一区二区| 黄色成人av网| 91成人在线观看喷潮蘑菇| 女人香蕉久久**毛片精品| 91精品视频专区| 中文字幕中文字幕在线十八区 | 97在线视频国产| 神马一区二区三区| 日韩欧美亚洲成人| 青娱乐国产视频| 精品一区二区三区在线观看国产 | 久久福利一区| 亚洲 国产 日韩 综合一区| 亚洲精品aa| 欧美夫妻性视频| 午夜激情在线视频| 欧美调教femdomvk| 99视频只有精品| a美女胸又www黄视频久久| 91猫先生在线| 日韩久久精品网| 肥熟一91porny丨九色丨| 美女搞黄视频在线观看| 中文字幕欧美在线| 精品国产一级片| 狠狠躁夜夜躁久久躁别揉| 精品熟妇无码av免费久久| 国产一区二区三区日韩| 无码中文字幕色专区| 欧美日韩中文一区二区| 91久久精品国产91久久性色tv| 天堂√中文最新版在线| 色小说视频一区| 狠狠人妻久久久久久综合麻豆 | 国产av无码专区亚洲av| 精品国产91久久久久久| 懂色av蜜臀av粉嫩av永久| 国产v综合v亚洲欧| 久草综合在线观看| 综合久久久久| 日本10禁啪啪无遮挡免费一区二区 | 日本一区二区三区在线免费观看| 99伊人成综合| 桥本有菜av在线| 一本久久青青| 亚洲已满18点击进入在线看片| 麻豆mv在线看| 欧美www在线| 国产51人人成人人人人爽色哟哟| 欧美一区二区女人| 亚洲 国产 日韩 欧美| 亚洲永久精品大片| 日韩免费成人av| 91免费在线视频观看| 亚洲一区二区三区四区精品| 久久久久久色| av在线播放亚洲| 国产精品精品国产一区二区| 日本成人黄色| 欧美五码在线| 肥熟一91porny丨九色丨| 日韩在线激情| 国产精品88a∨| 色综合桃花网| 668精品在线视频| 四虎影视成人| 久久久成人av| 亚洲1卡2卡3卡4卡乱码精品| 日韩av中文在线| 嫩草影院一区二区| 欧美一区二区三区在线观看视频| 特级西西444www大胆免费看| 欧美性猛交视频| 久久久久久久国产精品毛片| 亚洲欧洲国产专区| 天天摸日日摸狠狠添| 国产欧美一区二区精品忘忧草| 99re久久精品国产| av动漫一区二区| 婷婷五月精品中文字幕| 国产精品99久| 女同性αv亚洲女同志| 国产综合久久久久影院| 天堂在线中文在线| 久久99久久精品| 亚洲一区二区三区四区五区| 久久精品国产99| www.com污| 国产在线不卡视频| 四虎1515hh.com| 国产成人av电影在线观看| 秋霞午夜鲁丝一区二区| 国产精品88av| 9.1在线观看免费| 成人精品视频一区二区三区 | 久久综合久久色| 久久影院亚洲| xxxx一级片| 六月婷婷色综合| 亚洲黄色片免费看| 国产成人免费视频网站高清观看视频| 天堂在线精品视频| 成人午夜碰碰视频| 中文字幕一区三区久久女搜查官| 波多野结衣中文一区| 右手影院亚洲欧美| 国产亚洲视频系列| 69xxx免费| 亚洲欧美日韩系列| 久久久久久蜜桃| 婷婷六月综合亚洲| 久久久久久亚洲av无码专区| 欧美视频一区在线| 国产熟女一区二区三区四区| 日韩欧美卡一卡二| 亚洲欧洲国产综合| 国产一区二区激情| 永久免费网站在线| 91黄色8090| 国产成人精品一区二三区在线观看| 国产精品美女免费看| 国产色99精品9i| 国产一区二区三区免费不卡| 国产欧美日韩| 精品一区二区成人免费视频 | 91地址最新发布| 97精品国产综合久久久动漫日韩| 亚洲影影院av| 亚洲国产网址| 美国av在线播放| 亚洲一区自拍| 国产资源中文字幕| av亚洲精华国产精华精| ass极品国模人体欣赏| 亚洲一区二区视频在线观看| 337p粉嫩色噜噜噜大肥臀| 欧美一区二区性放荡片| 亚洲 美腿 欧美 偷拍| 丝袜美腿精品国产二区| www.九色在线| 亚洲aⅴ男人的天堂在线观看| 女仆av观看一区| 日韩视频在线免费播放| 午夜一级在线看亚洲| 一区二区久久精品| 久久精品无码一区二区三区| 可以直接看的黄色网址| 欧美自拍偷拍午夜视频| 天堂av2024| 久久97久久97精品免视看| 午夜欧美巨大性欧美巨大| 国产精品二区在线| 日韩在线观看一区| 免费黄色特级片| 成人爱爱电影网址| 国产黄色片在线免费观看| 欧美综合欧美视频| 欧美在线一卡| 久久免费福利视频| 国产一区二区三区精品在线观看 | 调教视频免费在线观看| 4444欧美成人kkkk| baoyu135国产精品免费| 亚洲一区不卡在线| 丝袜美腿高跟呻吟高潮一区| 精品人妻一区二区三区日产| 亚洲精品你懂的| 少妇太紧太爽又黄又硬又爽| 欧美一区二区三区免费观看视频 | 日本欧美精品在线| 亚洲成av人片在线观看www| 伊人情人网综合| 美女视频第一区二区三区免费观看网站| 亚洲精品乱码久久久久久蜜桃图片| 亚洲色图在线播放| 91午夜交换视频| 这里只有精品视频在线| 国产精品一区二区av影院萌芽| 国产精品日韩欧美一区二区| 欧美ab在线视频| 一级淫片在线观看| 亚洲视频资源在线| 国产精品欧美亚洲| 久久精品欧美视频| 国产美女亚洲精品7777| 2025韩国大尺度电影| 久久国产福利国产秒拍| 极品色av影院| 欧美日韩你懂得| 在线免费看黄| 91精品国产综合久久香蕉最新版| jlzzjlzz亚洲女人| 无限资源日本好片| 国产精品美女久久久久aⅴ| 综合久久中文字幕| 日日骚久久av| 中文幕av一区二区三区佐山爱| 亚洲人成77777| 久久99久久久久| 欧美日韩在线视频免费| 日韩免费在线观看| 成人在线免费观看黄色| 国产亚洲精品美女久久久m| 亚洲一区中文| www..com.cn蕾丝视频在线观看免费版 | 免费av网址在线| 中文字幕av在线一区二区三区| 伊人网站在线观看| 免费97视频在线精品国自产拍| 99国产精品久久一区二区三区| 久久综合九色综合88i| 久久久天堂av| 91麻豆国产视频| 欧美激情高清视频| 欧美偷窥清纯综合图区| 啊啊啊国产视频| 亚洲人被黑人高潮完整版| 国产77777| 国产大片精品免费永久看nba| 日韩欧美1区| 成人欧美精品一区二区| 色婷婷综合久久久久中文一区二区| 91精彩在线视频| 国产日韩二区| 美女久久久精品| 激情综合网五月天| 亚洲全黄一级网站| 国产精品1区| 99热成人精品热久久66| 综合久久综合久久| 亚洲 欧美 自拍偷拍| 国产主播欧美精品| 1024成人| 午夜国产小视频| 日韩精品小视频| 国产精品成人**免费视频| 成人黄色av片| 综合久久久久久| 精品三级久久久久久久电影聊斋| 91精品视频在线| 久久久人人人| 久久黄色免费网站| 在线看日韩av| 欧美丝袜美腿| 精品人妻一区二区三| 欧美中文字幕一区| a√中文在线观看| 男人j进女人j|