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

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

基于NodeJS從零構建自動化出碼工作流

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

TtK28資訊網(wǎng)——每日最新資訊28at.com

前言

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

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

你將收獲

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

正文

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

TtK28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

TtK28資訊網(wǎng)——每日最新資訊28at.com

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

TtK28資訊網(wǎng)——每日最新資訊28at.com

TtK28資訊網(wǎng)——每日最新資訊28at.com

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

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

2. nodejs如何使用父子進程

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

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

TtK28資訊網(wǎng)——每日最新資訊28at.com

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

// child.jsfunction computedTotal(arr, cb) {    // 耗時計算任務}// 與主進程通信// 監(jiān)聽主進程信號process.on('message', (msg) => {  computedTotal(bigDataArr, (flag) => {    // 向主進程發(fā)送完成信號    process.send(flag);  })});// main.jsconst { fork } = require('child_process');app.use(async (ctx, next) => {  if(ctx.url === '/fetch') {    const data = ctx.request.body;    // 通知子進程開始執(zhí)行任務,并傳入數(shù)據(jù)    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í)行命令行指令。至于父子進程的更多應用,大家可以自行探索。TtK28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

TtK28資訊網(wǎng)——每日最新資訊28at.com

為了實現(xiàn)以上過程,我們需要兩個關鍵環(huán)節(jié):TtK28資訊網(wǎng)——每日最新資訊28at.com

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

第一個環(huán)節(jié)很好實現(xiàn),我們只需要用nodejs的fs模塊生成文件到指定目錄即可,這里筆者重點介紹第二個環(huán)節(jié)的實現(xiàn)。TtK28資訊網(wǎng)——每日最新資訊28at.com

當我們將json數(shù)據(jù)生成到H5 Template中之后,就可以進行打包了,但是這個過程需要自動化的去處理,不能像我們之前啟動項目一樣,手動執(zhí)行npm start或者yarn start。我們需要程序自動幫我們執(zhí)行這個命令行指令,筆者在查nodejs API突然發(fā)現(xiàn)了child_process的exec方法,可以用來解析指令,這個剛好能實現(xiàn)我們的需求,所以我們開始實現(xiàn)它。代碼如下:TtK28資訊網(wǎng)——每日最新資訊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的第一個參數(shù),他就會幫我們解析字符串并執(zhí)行對應的命令行指令。在執(zhí)行完成之后,我們可以根據(jù)回調(diào)函數(shù)(第二個參數(shù))里的參數(shù)值來判斷執(zhí)行結果。整個過程是異步的,所以我們不用擔心阻塞問題,為了實時反饋進度,我們可以用socket來將進度信息推送到瀏覽器端。TtK28資訊網(wǎng)——每日最新資訊28at.com

4. socket.io實現(xiàn)消息實時推送

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

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

很明顯使用websocket雙向通信會更適合本項目。這里我們直接使用社區(qū)比較火的socket.io.由于官網(wǎng)上有很多使用介紹,這里筆者就不一一說明了。我們直接看業(yè)務里的代碼使用:TtK28資訊網(wǎng)——每日最新資訊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);// ...省略其他業(yè)務代碼useEffect(() => {  socket.on('connect', function(){    console.log('connect')  });  socket.on('htmlFail', function(data){    // ...  });  socket.on('disconnect', function(e){    console.log('disconnect', e)  });}, [])復制代碼

這樣我們就能實現(xiàn)服務器任務流的狀態(tài)實時反饋給瀏覽器端了。TtK28資訊網(wǎng)——每日最新資訊28at.com

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

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

6. 總結

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

體驗地址: https://dooring.vip。TtK28資訊網(wǎng)——每日最新資訊28at.com

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

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

上一篇: C# 特性(Attribute)詳解及示例,你學會了嗎?

下一篇: TaskAffinity屬性對應用程序任務棧和啟動行為的影響

標簽:
  • 熱門焦點
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經(jīng)過去,最明顯的肯定就是大內(nèi)存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • 6月安卓手機好評榜:魅族20 Pro蟬聯(lián)冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內(nèi)市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 分享六款相見恨晚的PPT模版網(wǎng)站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網(wǎng)站旨在為全球Office用戶提供豐富的高品質(zhì)原創(chuàng)PPT模板、實用文檔、數(shù)據(jù)圖表及個性化定制服務。優(yōu)點:OfficePLUS是微軟官方網(wǎng)站,囊括PPT模板、Word模
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優(yōu)酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了——貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經(jīng)無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的“網(wǎng)紅”。7月5日至9日,為期5天的東方甄選“甘肅行”首次在自有App內(nèi)直播,
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗

    近日,iOS用戶迎來微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項實用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡單來說就是已發(fā)布的朋友圈
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀?! ∶绹鴷r間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內(nèi)容審核等。此前,T
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美大色视频| 欧美怡红院视频| 一区二区三区在线看| 黄色成人av网| 亚洲精品一区二区三区福利| 日韩小视频在线观看| 亚洲制服欧美中文字幕中文字幕| 欧美一区三区二区在线观看| 免费亚洲一区| 国产精品www色诱视频| 国产欧美成人| 亚洲国产小视频在线观看| 亚洲午夜在线| 久久久一区二区| 一区在线电影| 亚洲激情在线| 校园春色综合网| 欧美成人午夜激情| 国产精品入口福利| 亚洲风情亚aⅴ在线发布| 一区二区三区久久久| 久久精品国产精品亚洲精品| 欧美精品精品一区| 国产一区二区三区av电影| 亚洲精品中文字幕女同| 欧美在线观看视频| 欧美日韩精品免费看| 国产一区二区三区免费在线观看| 亚洲精品在线免费| 久久精品视频在线看| 欧美视频免费看| 在线成人av| 午夜精品一区二区三区电影天堂| 欧美成人午夜激情在线| 国产视频自拍一区| 宅男噜噜噜66一区二区66| 久久伊人亚洲| 国产精品一区久久| 亚洲看片一区| 久久网站热最新地址| 国产精品久久一卡二卡| 亚洲茄子视频| 久久久久国产精品午夜一区| 国产精品v欧美精品v日韩| 亚洲福利视频二区| 欧美一区二区大片| 欧美午夜精品理论片a级大开眼界| 一区二区在线视频播放| 亚洲中午字幕| 欧美日韩国产免费观看| 亚洲成人在线免费| 久久精品国产综合| 国产精品久久久久永久免费观看 | 亚洲国产精品久久久久| 午夜视频一区| 欧美亚州在线观看| 亚洲欧洲日本mm| 久色成人在线| 好吊一区二区三区| 小嫩嫩精品导航| 国产精品久久久久久久久免费桃花| 亚洲欧洲日产国产网站| 久久亚洲国产成人| 国产一区深夜福利| 欧美亚洲一区二区三区| 国产精品久久久久永久免费观看| 99视频在线精品国自产拍免费观看| 免费亚洲一区| 在线免费观看日本一区| 久久免费观看视频| 国产综合精品一区| 久久精品成人一区二区三区| 国产欧美va欧美va香蕉在| 一区二区三区www| 欧美日韩国产不卡| 99re6这里只有精品视频在线观看| 你懂的视频一区二区| 在线成人欧美| 免费成人高清在线视频| 在线观看欧美激情| 久久影视精品| 在线播放不卡| 另类欧美日韩国产在线| 永久免费视频成人| 免费成人毛片| 91久久精品国产91久久性色| 欧美插天视频在线播放| 最新亚洲激情| 欧美日本一区| 亚洲深夜福利在线| 国产精品三区www17con| 亚洲欧美成人一区二区在线电影| 国产精品久久毛片a| 亚洲欧美成人网| 国产女精品视频网站免费| 欧美伊人久久久久久午夜久久久久| 国产视频不卡| 久久婷婷丁香| 亚洲片在线资源| 欧美日韩免费看| 亚洲男人第一av网站| 国产婷婷成人久久av免费高清| 欧美专区18| 亚洲大胆av| 欧美激情亚洲自拍| 亚洲一区二区三区在线| 国产欧美一区二区精品仙草咪| 欧美在线黄色| 在线看不卡av| 欧美日韩国产免费| 亚洲综合首页| 激情亚洲网站| 欧美日本不卡| 亚洲曰本av电影| 国产综合久久久久久| 欧美成人午夜剧场免费观看| 一本色道久久综合精品竹菊| 国产精品亚洲欧美| 久久婷婷麻豆| 99亚洲精品| 国产日韩欧美中文在线播放| 久久视频一区二区| 99亚洲一区二区| 国产日韩综合| 欧美大片免费观看| 亚洲宅男天堂在线观看无病毒| 国产一区二区精品久久| 欧美国产精品v| 午夜欧美精品久久久久久久| 在线免费日韩片| 欧美性做爰猛烈叫床潮| 久久久久久久性| av成人黄色| 国产亚洲成av人片在线观看桃| 欧美成人官网二区| 午夜精品亚洲| 亚洲三级影院| 国产三区二区一区久久| 欧美激情成人在线视频| 午夜久久久久久| 亚洲日本在线观看| 国产婷婷一区二区| 欧美精品在线一区| 久久精品综合一区| 在线中文字幕日韩| 在线观看国产精品网站| 国产精品久久久久久久久久尿| 久久亚洲高清| 亚洲欧美怡红院| 亚洲美女中出| 国内自拍亚洲| 国产精品久久久久久影院8一贰佰| 久久先锋影音| 欧美午夜片在线观看| 午夜久久电影网| 亚洲毛片av| 激情成人在线视频| 欧美视频在线观看免费| 老司机一区二区三区| 午夜精品一区二区三区在线视 | 99视频精品全部免费在线| 黑丝一区二区三区| 国产精品乱子久久久久| 欧美高清视频| 久久久欧美精品sm网站| 亚洲欧美另类久久久精品2019| 亚洲精品美女久久久久| 黄页网站一区| 国产日韩欧美一区二区三区在线观看 | 99天天综合性| 最新日韩欧美| 激情五月***国产精品| 国产乱码精品| 欧美视频一区在线| 欧美区一区二| 欧美大片免费久久精品三p | 国产精品久久久久久久久搜平片| 欧美1区2区视频| 久久免费偷拍视频| 久久精品二区三区| 午夜精品理论片| 亚洲先锋成人| 在线中文字幕不卡| 一区二区三区视频在线| 亚洲精品免费在线观看| 亚洲国产精品久久久久婷婷老年| 国产午夜精品理论片a级大结局| 欧美调教视频| 欧美日韩在线一区二区| 欧美国产日本韩| 欧美电影打屁股sp| 蜜乳av另类精品一区二区| 久久一二三区| 快射av在线播放一区| 久久午夜国产精品| 久久免费少妇高潮久久精品99| 久久激情网站| 久久国产手机看片| 久久精品成人| 久久天天狠狠| 欧美成人国产| 欧美黑人在线播放| 欧美大片一区| 欧美金8天国|