分离html文档为css,js,html

从html中分离css,js,html 文件到相应的文件中,并且进行格式化输出。

例:分离page/index.html,则调用transformhtml('page/index');

结果生成

    page/index/index.js,

    page/index/index.css,

    page/index/index.html,

    page/index.html

需要安装的包:npm i -D prettier cheerio write

const cheerio = require('cheerio')

let fs = require('fs');

const write = require('write');

const prettier = require("prettier");

let transformhtml = function(page){

    let temp = fs.readFileSync(page+".html",'utf-8');

    const $ = cheerio.load(temp,{

        // 防止element中的字符串被编码

        decodeEntities:false

    })

    

    let jstext="", csstext="";

    $("[src]").each(function(){

        let src = $(this).attr('src');

        let srcregexp = /^(?!http)[.\w]/;

        if(srcregexp.test(src)){

            $(this).attr('src','../'+src);

        }

    })

    $("[href]").each(function(){

        let src = $(this).attr('href');

        let srcregexp = /^(?!http|javascript)[.\w]/;

        if(srcregexp.test(src)){

            $(this).attr('href','../'+src);

        }

    })

    $('head').append('<link rel="stylesheet" href="./index.css" media="all" />')

    $("style").each(function () {

        csstext += $(this).html() + "\r\n";

        $(this).remove();

    })

    $("script").each(function () {

        if (!$(this).attr("src")) {

            if ($(this).attr("type") == undefined || $(this).attr("type") == "text/javascript") {

                jstext += $(this).html() + "\r\n";

                $(this).attr({type:"text/javascript","src":"./index.js"});

                $(this).text("");

            }

        }

    })

    jstext = prettier.format(jstext,{parser:"babel"})

    csstext = prettier.format(csstext,{parser:"css"})

    let htmltext = prettier.format($.html(),{parser:"html",printWidth:120})

    

    let dirs = page.split(/[/]/);

    let pagename = (dirs[dirs.length - 1] ? dirs[dirs.length - 1] : dirs[dirs.length - 2]);

    write.sync(page+"/index.css",csstext);

    write.sync(page+"/index.html",htmltext);

    write.sync(page+"/index.js",jstext);

    let html = "<!DOCTYPE html><html><script>window.location='./" + pagename + "/index.html'</script></html>"

    write.sync(page + ".html", html);

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值