日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-05-17 17:49:44 283觀看
導讀前言NodeJS在前端領域正扮演著越越重要的地位,它不僅可以讓前端工作者使用javascript編寫后端代碼,還能方便地搭建響應速度快、易于擴展的網絡應用。Node.js 使用事件驅動,非阻塞I/O 模型而得以輕量和高效,非常適合在分布

MNE28資訊網——每日最新資訊28at.com

前言

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

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

你將收獲

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

正文

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

MNE28資訊網——每日最新資訊28at.com

在吹完牛逼之后,我們開始介紹如何設計一款在線工作流。MNE28資訊網——每日最新資訊28at.com

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

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

MNE28資訊網——每日最新資訊28at.com

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

MNE28資訊網——每日最新資訊28at.com

MNE28資訊網——每日最新資訊28at.com

至于為什么沒有出現下載失敗的狀態,不要問我,問就是沒有失敗過(完了,找虐了)。MNE28資訊網——每日最新資訊28at.com

以上就是H5-Dooring實時編譯下載的工作流設計,至于線上更多的實際需求,我們也可以參考以上設計去實現,接下來筆者來具體介紹實現過程。MNE28資訊網——每日最新資訊28at.com

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

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

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

MNE28資訊網——每日最新資訊28at.com

nodejs有3種創建子進程的方式,這里筆者簡單介紹一下fork的方式。使用方式如下:MNE28資訊網——每日最新資訊28at.com

// child.jsfunction computedTotal(arr, cb) {    // 耗時計算任務}// 與主進程通信// 監聽主進程信號process.on('message', (msg) => {  computedTotal(bigDataArr, (flag) => {    // 向主進程發送完成信號    process.send(flag);  })});// main.jsconst { fork } = require('child_process');app.use(async (ctx, next) => {  if(ctx.url === '/fetch') {    const data = ctx.request.body;    // 通知子進程開始執行任務,并傳入數據    const res = await createPromisefork('./child.js', data)  }  // 創建異步線程  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方法,來解析并執行命令行指令。至于父子進程的更多應用,大家可以自行探索。MNE28資訊網——每日最新資訊28at.com

3. 使用child_processexec實現解析并執行命令行指令

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

以上的過程很關鍵, 這里筆者畫個大致的流程圖:MNE28資訊網——每日最新資訊28at.com

MNE28資訊網——每日最新資訊28at.com

為了實現以上過程,我們需要兩個關鍵環節:MNE28資訊網——每日最新資訊28at.com

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

第一個環節很好實現,我們只需要用nodejs的fs模塊生成文件到指定目錄即可,這里筆者重點介紹第二個環節的實現。MNE28資訊網——每日最新資訊28at.com

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

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的第一個參數,他就會幫我們解析字符串并執行對應的命令行指令。在執行完成之后,我們可以根據回調函數(第二個參數)里的參數值來判斷執行結果。整個過程是異步的,所以我們不用擔心阻塞問題,為了實時反饋進度,我們可以用socket來將進度信息推送到瀏覽器端。MNE28資訊網——每日最新資訊28at.com

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

在上面介紹的 exec實現解析并執行命令行指令 中還有一些細節可以優化,比如代碼執行進程的反饋,執行狀態的反饋。因為我們用的是異步編程,所以請求不會一直等待,如果不采取任何優化措施,用戶是不可能知道何時代碼打包編譯完成, 也不知道代碼是否編譯失敗,所以這個時候會采取幾種常用的放案:MNE28資訊網——每日最新資訊28at.com

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

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

// 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);// ...省略其他業務代碼useEffect(() => {  socket.on('connect', function(){    console.log('connect')  });  socket.on('htmlFail', function(data){    // ...  });  socket.on('disconnect', function(e){    console.log('disconnect', e)  });}, [])復制代碼

這樣我們就能實現服務器任務流的狀態實時反饋給瀏覽器端了。MNE28資訊網——每日最新資訊28at.com

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

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

6. 總結

以上教程筆者已經集成到H5-Dooring中,對于一些更復雜的交互功能,通過合理的設計也是可以實現的,大家可以自行探索研究。MNE28資訊網——每日最新資訊28at.com

體驗地址: https://dooring.vip。MNE28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-88938-0.html基于Node.js從零構建自動化出碼工作流

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: ASP.NET Core Web中使用AutoMapper進行對象映射

下一篇: 架構之路 | 提升后端接口性能的實戰技巧

標簽:
  • 熱門焦點
  • 5月iOS設備性能榜:M1 M2依舊是榜單前五

    和上個月一樣,沒有新品發布的iOS設備性能榜的上榜設備并沒有什么更替,僅僅只有跑分變化而產生的排名變動,剛剛開始的蘋果WWDC2023,推出的產品也依舊是新款Mac Pro、新款Mac Stu
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業務來說可快速實現自動化的上手工作。Selenium IDEKat
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein“利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之“想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!”曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大“烤”之下的除了眾生,還有各大企業發布的ESG報告。ESG是“環境保
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,“7
  • 郭明錤稱華為和江淮汽車合作開發問界MPV,定價100萬左右、計劃明年量產

    8 月 1 日消息,郭明錤今天在 Medium 平臺發布博文,稱華為正在和江淮汽車合作,開發售價在 100 萬元的問界 MPV,預計在 2024 年第 2 季度量產,銷量目標為
  • 2022爆款:ROG魔霸6 冰川散熱系統持續護航

    喜逢開學季,各大商家開始推出自己的新產品,進行打折促銷活動。對于忠實的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現在的
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
99精品热视频只有精品10| 亚洲第一色在线| 国产精品久久久久久模特| 国产精品久久婷婷六月丁香| 国产日韩av高清| 亚洲高清色综合| 亚洲精品在线一区二区| 亚洲免费在线| 麻豆成人综合网| 欧美日韩高清在线观看| 国产欧美精品日韩区二区麻豆天美| 伊人久久综合| 亚洲一区二区精品在线观看| 久久女同互慰一区二区三区| 欧美日韩视频在线| 国内自拍一区| 一本色道久久综合精品竹菊| 久久精品国产一区二区三区免费看| 欧美成人综合一区| 国产日韩欧美一区二区三区四区| 最新成人在线| 午夜视频久久久| 欧美国产日韩一区| 国产日本欧美一区二区三区在线 | 国产精品国产三级国产普通话蜜臀| 国产视频亚洲| 99在线精品免费视频九九视| 久久国产精品99国产精| 欧美日韩免费观看一区| 永久91嫩草亚洲精品人人| 99亚洲精品| 久久夜色精品国产噜噜av| 国产精品福利影院| 亚洲国产激情| 欧美一区二区三区在线视频| 欧美日韩国产首页| 国内一区二区三区在线视频| 亚洲一区高清| 欧美女人交a| 在线观看欧美精品| 羞羞色国产精品| 国产精品成人久久久久| 亚洲啪啪91| 久久美女性网| 国产亚洲一本大道中文在线| 亚洲一区二区三区四区视频| 欧美日韩国产成人精品| 亚洲福利国产| 久久久久综合| 国产真实久久| 午夜精品视频一区| 国产综合久久久久影院| 亚洲综合色网站| 欧美日韩国产精品自在自线| 亚洲国产精品成人久久综合一区| 欧美影院视频| 国产精品五区| 亚洲一区二区三区在线观看视频| 欧美精品午夜| 亚洲精品欧洲| 欧美激情导航| 亚洲人成在线播放网站岛国| 噜噜噜91成人网| 在线观看欧美精品| 久久影视三级福利片| 国产一区二区三区在线观看免费| 午夜精品久久久久久久蜜桃app| 欧美日韩在线一区| 日韩一级二级三级| 欧美第一黄色网| 亚洲激情社区| 欧美精品久久久久久久| 亚洲精品久久| 欧美国产在线电影| 亚洲欧洲精品一区二区三区波多野1战4 | 蜜月aⅴ免费一区二区三区| 国模精品娜娜一二三区| 欧美一区二区三区在线| 国产欧美一区二区三区国产幕精品 | 另类亚洲自拍| 在线观看欧美激情| 牛牛影视久久网| 最新亚洲一区| 欧美激情性爽国产精品17p| 亚洲日本va午夜在线影院| 欧美激情国产高清| 9久草视频在线视频精品| 欧美日韩一区二区免费在线观看 | 久久福利视频导航| 国内一区二区三区在线视频| 久久婷婷人人澡人人喊人人爽| 精品成人国产在线观看男人呻吟| 久久久久久久久久码影片| 一区二区三区亚洲| 欧美国产精品一区| 一本一本久久a久久精品牛牛影视| 欧美午夜激情在线| 亚洲深夜福利| 国产精品亚洲综合天堂夜夜| 欧美一区二区三区日韩| 国产综合一区二区| 欧美成人免费大片| 亚洲裸体俱乐部裸体舞表演av| 欧美色综合网| 欧美一区二区三区视频免费播放| 极品日韩av| 欧美黄色一区| 亚洲午夜精品久久| 国产婷婷一区二区| 免费成人美女女| 日韩亚洲欧美高清| 国产精品一区在线播放| 久久久久国产一区二区三区四区 | 欧美亚洲一区二区三区| 一区在线视频| 欧美日韩精品欧美日韩精品 | 欧美日韩亚洲国产一区| 亚洲欧美另类在线观看| 国产在线一区二区三区四区| 免费在线国产精品| 亚洲视频免费在线观看| 国产亚洲欧美一区二区三区| 你懂的一区二区| 亚洲一区二区三区四区中文 | 国产精品理论片在线观看| 久久精品免费电影| 亚洲日本成人| 国产欧美va欧美不卡在线| 巨胸喷奶水www久久久免费动漫| 日韩网站在线观看| 国产日韩一区二区| 欧美精品v国产精品v日韩精品 | 久久精品系列| 99pao成人国产永久免费视频| 国产精品一区久久| 欧美成人小视频| 亚洲欧美日韩在线观看a三区| 欲香欲色天天天综合和网| 欧美日韩网站| 久久激情婷婷| 亚洲视频一区二区| 影音国产精品| 国产精品久久久久久久久久免费| 久久人人97超碰国产公开结果| 99视频精品免费观看| 国产一区二区三区的电影| 欧美精品一区二区精品网 | 欧美日韩中文另类| 久久综合给合久久狠狠色| 亚洲欧美中文字幕| 亚洲精一区二区三区| 国内精品久久久| 国产精品高潮粉嫩av| 蜜桃av噜噜一区| 欧美伊人久久大香线蕉综合69| 亚洲免费黄色| 在线观看91久久久久久| 国产精品尤物| 欧美日韩在线播放一区二区| 免费久久99精品国产自在现线| 欧美一区二区免费| 亚洲一区二区毛片| 日韩午夜精品视频| 136国产福利精品导航| 国产精品视频yy9099| 欧美日韩国产在线播放网站| 免费一级欧美片在线观看| 欧美在线观看网址综合| 亚洲天堂av图片| 亚洲免费久久| 亚洲国产一区二区精品专区| 国产综合久久久久久鬼色| 国产精品一区二区久激情瑜伽| 欧美精品18+| 久久综合久色欧美综合狠狠| 久久精品国产欧美亚洲人人爽| 亚洲欧美日韩精品在线| 一区二区三区毛片| 亚洲理论电影网| 亚洲激情中文1区| 在线观看日韩| 悠悠资源网久久精品| 韩国v欧美v日本v亚洲v| 国产日韩欧美不卡在线| 国产精品你懂的在线欣赏| 欧美亚一区二区| 欧美日韩免费在线观看| 欧美精品一区二区在线观看| 欧美成年人在线观看| 欧美.日韩.国产.一区.二区| 久久一区二区三区国产精品| 欧美在线观看网址综合| 午夜在线视频观看日韩17c| 亚洲在线一区二区三区| 亚洲一二三区在线| 亚洲一二三区在线| 亚洲午夜女主播在线直播| 一区二区三区视频免费在线观看| 9久草视频在线视频精品| 夜夜嗨av一区二区三区四区| 中文在线一区| 亚洲天天影视| 亚洲欧美高清| 欧美在线观看视频在线|