欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何使用nodejs分離html文件里的js和css

這篇文章主要介紹如何使用nodejs分離html文件里的js和css,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出延壽免費做網(wǎng)站回饋大家。

摘要: 本文要實現(xiàn)的內(nèi)容,使用nodejs 對文件的增刪改查,演示的例子-》分離出一個html 文件里面的script 和style 里面的內(nèi)容,然后單獨生成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 內(nèi)容

/**

 * 

 */

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

/**

 * 向文件中追加內(nèi)容

 * @param {是文件名字} path 

 * @param {寫入文件的內(nèi)容} 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}數(shù)據(jù)已追加到文件`);

      resolve()

    });

  })

}

// 寫一個html

const writeHtml = (path, data) => {

  return new Promise(resolve => {

    fs.writeFile(path, data, (err) =>{

      if(err) {

        console.log('err', err)

        return

      }

      console.log(`${path} 寫入成功,功能結(jié)束!`);

      resolve() // 必須resolve 。不然 promise 就到此為止,調(diào)用該方法后面的代碼將不執(zhí)行

    })

  })

}

 

// 插件 方法入口

(async ()=>{

  console.log('==========================game-start=============================');

  await deleteDir('./test');

  console.log('我應(yīng)該是等---刪除文件夾后---才出現(xiàn)')

 

  await mkdirTest();

  console.log('我應(yīng)該是在---文件夾新建成功---后出現(xiàn)!');

 

  let cssReg = /<style>[\s|\S]*?<\/style>/ig;

  let jsReg = /<script>[\s|\S]*?<\/script>/ig;

  let allStyleReg = /<\/style>[\s|\S]*?<style>/ig;

  let allScriptReg = /<\/script>[\s|\S]*?<script>/ig;

  let cssLink = '<link rel="stylesheet" href="./test.css" rel="external nofollow" >';

  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('我應(yīng)該是在---css寫入成功---后出現(xiàn)!');

 

  await appendFile('./test/test.js', JSON.parse(jsContent), 'js');

  console.log('我應(yīng)該是在---js寫入成功---后出現(xiàn)!');

 

  htmlContentStr = originContent

  .replace(allStyleReg, '')

  .replace(cssReg, cssLink)

  .replace(allScriptReg, '')

  .replace(jsReg, jsrc);

  console.log('copyTest.html 文本已經(jīng)格式化,準(zhǔn)備寫入');

  await writeHtml('./test/copyTest.html', htmlContentStr);

 

  console.log('==========================game-over=============================');

})()

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

node extract-js-css

如果你要使用 es6 module,用 import 導(dǎo)入方法,需要單獨裝一個babel,使用這個包去編譯成es5,在運行,具體使用可以down項目運行一下。

針對此項目,需要提醒說明以下:

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

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

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

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

文中的一個demo 提供了處理多個異步、一個異步操作里面包含多個異步操作,包括在循環(huán)里執(zhí)行異步操作 的一個方案,里面具體針對HTML 文件的字符串處理,比較搓搓,在用正則匹配和字符串格式化和解析字符串的情況比較單一。在讀取完文件內(nèi)容后,需要 JSON.stringify,后來在填入文件中的時候要 JSON.parse , 目前沒找到合適的方法。

如何使用nodejs分離html文件里的js和css

以上是“如何使用nodejs分離html文件里的js和css”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前名稱:如何使用nodejs分離html文件里的js和css
URL地址:http://aaarwkj.com/article34/igigpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、服務(wù)器托管、商城網(wǎng)站、、網(wǎng)站營銷、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
夜福利国产视频大屁股| 日本欧美三级一二三区| 深夜av一区二区三区| 色噜噜色一区二区三区| 国产精品日本欧美一区二区| 中文字幕一区二区三天| 亚洲成人午夜激情的三级网| 亚洲欧美日韩一区91| 亚洲国产精品有码专区| 色桃子av一区二区三区| 中文字幕精品免费日韩在线| 亚洲热久久国产经典视频| 91青青草原免费观看| 国产三级传媒视频在线观看| 欧美日韩国产另类久久| 精品人妻少妇一区二区三区| 久久国产欧美日韩精品| 日韩精品熟妻人女亚洲一区| 亚洲精品在线一二三区| 在线观看高清免费国产| 日韩电影一区二区在线观看中文字幕 | 日本丝袜福利在线观看| 久久这里只有精品蜜桃| av东京热狠狠男人的天堂| 国产一区二区视频在线| av影片在线观看不卡| 国产欧美日韩亚洲综合在线| 日韩精品毛片精品一区到三区| 伦理中文字幕一区二区| 天天操天天干夜夜骑| 韩日男人女人性生活视频| 日本高清免费黄色录像| 久久精品亚洲夜色国产av| 久久亚洲欧美国产精品观看| 久久精品国产亚洲av麻豆尤物| 相泽南亚洲一区二区在线播放| 午夜福利中文在线观看| 国产区青青操自拍视频| 国产一级二级三级黄色| 久久91超碰青草在哪里看| 国产精品白浆大屁股一区二区三|