亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

如何使用nodejs分離html文件里的js和css(代碼示例)

2020-03-24 16:03:34
字體:
來源:轉載
供稿:網友
本篇文章給大家帶來的內容是關于如何使用nodejs分離html文件里的js和css(代碼示例) ,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

摘要: 本文要實現的內容,使用nodejs 對文件的增刪改查,演示的例子-》分離出一個html 文件里面的script 和style 里面的內容,然后單獨生成js文件和css 文件。中間處理異步的api-》async/await , Promise

項目托管:extract-js-css , 歡迎star

直接上代碼:

// extract-js-css// import fs from fs var fs = require( fs )// import csscomb from csscomb // var csscomb = require( csscomb )// var comb = new csscomb( zen // console.log(comb)// 刪除文件const deleteFile = (path)= { return new Promise(resolve = { fs.unlink(path, (err) = { if (err) { console.log(err) return console.log(`已成功刪除 ${path}文件`); resolve()// 刪除文件夾const deleteDir = async (path)= { let _files = await new Promise (resolve = { fs.readdir(path, (err,files) = { if (err) { console.log(err) console.log(`已成功讀取 ${path} 文件夾`); resolve(files) if(_files _files.length) { for(let i =0;i _files.length;i++) { // console.log(_files[i], innnnnn ) await deleteFile( ./test/ + _files[i]) // console.log( delete hou ) await new Promise(resolve = { fs.rmdir(path, (err) = { if (err) { console.log(err) console.log(`已成功刪除空 ${path}文件夾`); resolve()const emptyDir = (path) = { return new Promise(resolve = { fs.rmdir(path, (err) = { if (err) { console.log(err) console.log(`已成功刪除空 ${path}文件夾`); resolve()// 新建文件夾const mkdirTest = ()= { return new Promise(resolve = { fs.mkdir( ./test , { recursive: true }, (err, data)= { if (err) { console.log(err) console.log( 新建文件夾成功 ) resolve()// 讀取html 內容const readHtml = ()= { return new Promise(resolve = { fs.readFile( ./test.html , utf-8 , (err, data)= { if(err) { throw Error(err) console.log( test.html 讀取成功!--NO1 ) resolve(data)// 寫入css 和js * 向文件中追加內容 * @param {是文件名字} path  * @param {寫入文件的內容} data  * @param {文件類型} type  * @author erlinger * @time const appendFile = (path, data, type) = { return new Promise(resolve = { fs.appendFile(path, data, (err) = { if (err) { console.log(err) console.log(`${type}數據已追加到文件`); resolve()// 寫一個htmlconst writeHtml = (path, data) = { return new Promise(resolve = { fs.writeFile(path, data, (err) = { if(err) { console.log( err , err) return console.log(`${path} 寫入成功,功能結束!`); resolve() // 必須resolve 。不然 promise 就到此為止,調用該方法后面的代碼將不執行// 插件 方法入口(async ()= { console.log( ==========================game-start=============================  await deleteDir( ./test  console.log( 我應該是等---刪除文件夾后---才出現 ) await mkdirTest(); console.log( 我應該是在---文件夾新建成功---后出現!  let cssReg = / style [/s|/S]*? //style  let jsReg = / script [/s|/S]*? //script  let allStyleReg = / //style [/s|/S]*? style  let allScriptReg = / //script [/s|/S]*? script  let cssLink = link rel= stylesheet href= ./test.css  let jsrc = script src= ./test.js /script  let styleCollection, scriptColletion; let cssContent = , jsContent = , htmlContentStr =  let originContent = await readHtml(); styleCollection = originContent.match(cssReg); scriptColletion = originContent.match(jsReg); // 處理 css for (let i =0;i styleCollection.length;i++) { cssContent += JSON.stringify(styleCollection[i]); cssContent = cssContent.replace(/ style /g, ).replace(/ //style /g, ).replace(/( )/g, ) for (let i =0;i scriptColletion.length;i++) { jsContent += JSON.stringify(scriptColletion[i]); jsContent = jsContent.replace(/ script /g, ).replace(/ //script /g, ) .replace(/ //script * script /g, ).replace(/( )/g, ) await appendFile( ./test/test.css , JSON.parse(cssContent), css  console.log( 我應該是在---css寫入成功---后出現!  await appendFile( ./test/test.js , JSON.parse(jsContent), js  console.log( 我應該是在---js寫入成功---后出現!  htmlContentStr = originContent .replace(allStyleReg, ) .replace(cssReg, cssLink) .replace(allScriptReg, ) .replace(jsReg, jsrc); console.log( copyTest.html 文本已經格式化,準備寫入  await writeHtml( ./test/copyTest.html , htmlContentStr); console.log( ==========================game-over============================= })()

代碼確實沒什么好解釋的,慢慢看就明白了。運行:

node extract-js-css

如果你要使用 es6 module,用 import 導入方法,需要單獨裝一個babel,使用這個包去編譯成es5,在運行,具體使用可以down項目運行一下。
針對此項目,需要提醒說明以下:

對文件的處理都是異步操作,如果是單一的一個異步操作方法(比如:appendFile 方法),它就是往文件里面異步添加內容,直接封裝成一個promise,然后 return 出來就好。

如果一個操作里面包含多個異步處理邏輯的就需要在這個方法里面,用async 聲明方法,用await 等待異步操作,最后return 出去一個promise

在執行主流程中,我們用async聲明的方法進行調用(我這里是匿名函數直接調用) ,用await 進行等待異步操作,這樣我們的主流程就是一個同步的執行的流程,看起來很爽朗。

文中的異步操作文件的api 方法是異步的,nodejs 開發文檔提供了同步操作文檔,大家可以直接使用同步的api。我這里主要是聯系在異步操作的過程中,使用async/ await promise 方法,更好的掌握它。

文中的一個demo 提供了處理多個異步、一個異步操作里面包含多個異步操作,包括在循環里執行異步操作 的一個方案,里面具體針對HTML 文件的字符串處理,比較搓搓,在用正則匹配和字符串格式化和解析字符串的情況比較單一。在讀取完文件內容后,需要 JSON.stringify,后來在填入文件中的時候要 JSON.parse , 目前沒找到合適的方法,如果有大佬有合適的方法,歡迎告知與我,大家一起交流。

下面是 執行一個主 async方法的一個過程

2043074121-5cac105788252_articlex.png

以上就是如何使用nodejs分離html文件里的js和css(代碼示例)的詳細內容,其它編程語言

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品18久久久久久麻辣| 久久久久久国产免费| 91chinesevideo永久地址| 欧美日韩国产999| 91精品啪aⅴ在线观看国产| 亚洲国产精品福利| 久久69精品久久久久久国产越南| 欧美另类老肥妇| 亚洲日本中文字幕免费在线不卡| 精品中文字幕乱| 91sao在线观看国产| 精品在线观看国产| 国产亚洲美女久久| 国产成人精品久久| 136fldh精品导航福利| 亚洲福利在线视频| 精品视频在线观看日韩| 78m国产成人精品视频| 欧美日韩亚洲一区二区三区| 欧洲中文字幕国产精品| 国产精品一区电影| 久久久免费观看| 久久精品久久精品亚洲人| 日韩视频在线观看免费| 国产不卡av在线| 久久久久久这里只有精品| 国内精品在线一区| zzijzzij亚洲日本成熟少妇| 日韩免费观看av| 亚洲有声小说3d| 久久久久久高潮国产精品视| 97在线观看免费高清| 久久精品成人动漫| 成人免费xxxxx在线观看| 91免费在线视频| 国产一区二区三区在线看| 欧美精品少妇videofree| 国产精品美女呻吟| 久久久久久久久久久久久久久久久久av| 成人写真福利网| 亚洲最新中文字幕| 午夜精品99久久免费| 日韩电影在线观看中文字幕| 亚洲欧洲在线视频| 久久网福利资源网站| 2019最新中文字幕| 欧美激情a在线| 国语自产偷拍精品视频偷| 成人午夜高潮视频| 亚洲香蕉成视频在线观看| 久久久久久久久久久91| 亚洲字幕一区二区| 在线观看精品国产视频| 亚洲男人天堂古典| 欧美精品一本久久男人的天堂| 国产精品偷伦视频免费观看国产| 7777kkkk成人观看| 日韩中文字在线| 国产脚交av在线一区二区| xvideos亚洲| 97视频在线观看网址| 国产女人18毛片水18精品| 中文字幕亚洲欧美在线| 欧美主播福利视频| 午夜精品视频在线| 欧美国产日产韩国视频| 亚洲欧美国产精品va在线观看| 亚洲人成五月天| 亚洲97在线观看| 国产精品扒开腿做| 日韩av在线一区二区| 尤物精品国产第一福利三区| 亚洲娇小xxxx欧美娇小| 日韩一区二区三区xxxx| 国产精品91久久久久久| 欧美与欧洲交xxxx免费观看| 国产91精品视频在线观看| 国产精品久久综合av爱欲tv| 日韩欧美一区视频| 欧美精品久久久久| 亚洲视频在线观看免费| 精品国产欧美一区二区三区成人| 亚洲一区二区三区xxx视频| 8050国产精品久久久久久| 国产精品一二三视频| 久久中文精品视频| 欧美超级免费视 在线| 第一福利永久视频精品| 久久99精品久久久久久琪琪| 国产精品一区二区三区成人| 国产性猛交xxxx免费看久久| 午夜免费在线观看精品视频| 色香阁99久久精品久久久| 91精品久久久久久久| 国产一区二区av| 成人xxxx视频| 欧美日韩在线影院| 亚洲精品www久久久| 国语自产精品视频在线看抢先版图片| 国产一区二区三区欧美| 亚洲精品一区av在线播放| 精品中文字幕久久久久久| 揄拍成人国产精品视频| 国产精品第1页| 亚洲自拍偷拍网址| 亚洲女人天堂成人av在线| 久久久日本电影| 亚洲香蕉在线观看| 欧美电影在线观看高清| 国产精品女人网站| 日韩欧美福利视频| 亚洲永久在线观看| 日本韩国欧美精品大片卡二| 这里只有精品久久| 亚洲高清福利视频| 日韩av电影院| 最近2019年日本中文免费字幕| 久久国产精品久久久久久久久久| 伦理中文字幕亚洲| 亚洲欧美激情一区| 亚洲人成在线电影| 久久久www成人免费精品张筱雨| 亚洲男人天堂手机在线| 91在线精品视频| 国产精品黄色影片导航在线观看| 国产香蕉一区二区三区在线视频| 亚洲成人性视频| 国产成人av在线播放| 久久久免费av| 欧美极品少妇xxxxⅹ喷水| 亚洲欧美www| 久久亚洲一区二区三区四区五区高| 亚洲国产精品久久久久秋霞不卡| 精品国产一区av| 欧洲成人在线视频| 91日韩在线播放| 日本一区二区三区在线播放| 久久精品视频播放| 亚洲欧美日韩一区在线| 欧美大奶子在线| 亚洲韩国欧洲国产日产av| 欧美精品免费播放| 亚洲一区二区三区成人在线视频精品| 欧美成人高清视频| 欧美激情亚洲激情| 97在线视频观看| 国产欧美中文字幕| 亚洲精品99久久久久| 中文字幕日韩在线观看| 亚洲人成在线免费观看| 日韩在线观看你懂的| 亚洲wwwav| 国产伊人精品在线| 7m第一福利500精品视频| 亚洲第一在线视频| 国产精品久久久久久久久久久久久| 亚洲风情亚aⅴ在线发布| 日本欧美在线视频| 国产精品九九久久久久久久| 91视频九色网站| 97色伦亚洲国产| 欧美激情精品久久久久久黑人| 亚洲福利视频久久| 成人深夜直播免费观看|