node.js提取html中的内部引入css和js代码,并修改为外部引入

2023-05-16

前提:配置好node环境,能够使用终端(cmd或Windows PowerShell)node命令运行js文件
nodejs安装教程
某位大佬整理的nodejs入门教程

node xxx.js //利用node环境运行js文件

原版html文件:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>nodejsStudy</title>
  <style>
    .test{
      list-style: none;
      line-height: normal;
    }  
    h1 {
      color: orange;
    }
  </style>
  <script src="./javascripts/require.min.js"></script>
</head>
<body>
  <h1>nodejsDemo
  </h1>


  
  <script>
    var x=document.querySelector('h1');
  </script>
  
</body>
</html>

负责处理的js文件:

const fs=require('fs');
//读取文件方法,其中的两个参数顺序不可变,名称可变
const path=require('path');

//\s代表空格字符,\S代表非空格字符,\需要/转义
//匹配style标签
const regStyle=/<style>[\s\S]*<\/style>/
//匹配script标签
const regScript=/<script>[\s\S]*<\/script>/
//读取指定的,包含了css和js的html文件
fs.readFile(path.join(__dirname,'./index.html'),'utf-8',function(err,dataStr){
    if(err) return console.log('read file error!');
    console.log('read file success!');
    // console.log(dataStr);
    
    resolveCSS(dataStr);
    resolveJS(dataStr);
    resolveHTML(dataStr);
})
//用于提取html中的css代码并保存到外联css文件
function resolveCSS(dataStr){
    const r1=regStyle.exec(dataStr);
    try {
        const newCSS=r1[0].replace('<style>','').replace('</style>','');
        fs.writeFile(path.join(__dirname,'./style.css'),newCSS,function(err){
            if(err) return console.log('css write error!');
            console.log('css write success!');
        })
    } catch (error) {
        //style之前已经处理好了,报错提示
        console.log('can not find <style></style>');
    }
    // console.log(newCSS);
    
}
//用于提取html中的js代码并保存到外联js文件
function resolveJS(dataStr){
    //通过正则表达式筛选出html中的script脚本
    const r1=regScript.exec(dataStr);
    try {
        const newJS=r1[0].replace('<script>','').replace('</script>','');
        // console.log('newJS:',newJS);
        fs.writeFile(path.join(__dirname,'./Test.js'),newJS,function(err){
            if(err) return console.log('js write error!');
            console.log('js write success!');
        })
    } catch (error) {
        //script之前已经处理好了,报错提示
        console.log('can not find <script></script>');
    }
}
//去除原本html中的css和js代码,同时设置外联css文件和外联js文件链接
function resolveHTML(dataStr){
    const newHtml=dataStr.replace(regStyle,'<link rel="stylesheet" href="style.css">')
    .replace(regScript,'<script src="./Test.js"></script>');
    console.log(newHtml);
    fs.writeFile(path.join(__dirname,'./index.html'),newHtml,function(err){
        if(err) console.log('html write error!');
        console.log('html write success!');
    })
}

使用终端运行js脚本:
在这里插入图片描述
处理前项目结构:
在这里插入图片描述

处理后原html文件同级目录下的结构:
在这里插入图片描述
control.js为用于处理html文件的脚本文件,需要用node环境运行;
index.html为被处理的网页文件,处理前包含了内部css和js代码;
style.css为处理后的css文件,用于存储html之前的css代码;
Test.js为处理今后的js文件,用于存储html之前的js代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node.js提取html中的内部引入css和js代码,并修改为外部引入 的相关文章

随机推荐

  • windows10隐藏分区(隐藏efi系统分区)

    我们需要使用diskpart来移除这个误显示的盘符 可能使用的命令 xff1a 1 以管理员身份运行CMD xff1b 2 运行diskpart命令 xff1b 3 list disk 显示所有安装的磁盘 xff1b 4 select di
  • 干支纪年和纪日算法

    怎样从已知年份和日期得到对应的干支纪年和纪日 文 xff0f 葛民勤 摘要 xff1a 从已知年份计算干支纪年很简单 xff1a 年份数减3 xff0c 除以10的余数是天干 xff0c 除以12的余数是地 支 从已知日期计算干支纪日的公式
  • Shell 脚本监控磁盘空间

    df 命令可以展示文件系统的磁盘有效空间信息 如果不指定文件名 xff0c 则当前所有挂载的文件系统有效空间信息 实现步骤 使用 df 查看磁盘信息使用 grep命令 过滤文件系统 xff0c 获取空间使用百分比通过Shell 脚本进行监控
  • R 实现熵权法计算权重

    按照信息论基本原理的解释 xff0c 信息是系统有序程度的一个度量 xff0c 熵是系统无序程度的一个度量 xff1b 根据信息熵的定义 xff0c 对于某项指标 xff0c 可以用熵值来判断某个指标的离散程度 xff0c 其信息熵值越小
  • R实现KMeans聚类算法教程

    本文和你一起学习无监督机器学习算法 kmeans算法 xff0c 并在R中给详细的实现示例和步骤 什么是k means聚类算法 聚类是从数据集中对观测值进行聚类的机器学习方法 它的目标是聚类相似观测值 xff0c 不同类别之间差异较大 聚类
  • 使用gopsutil获取OS信息

    生产环境通常需要掌握主机硬盘 CPU 内存 进程等资源使用情况 xff0c 可以执行系统命令获得 xff0c 通过os exec执行命令 xff0c 如 xff1a ps cd top xff0c 然后解析命令执行结果 对于linux操作系
  • gcc工具小结

    关于 l和 Wall选项的解析 xff1a Wall 打开gcc的所有警告 l参数就是用来指定程序要链接的库 xff0c l参数紧接着就是库名 xff0c 那么库名跟真正的库文件名有什么关系呢 xff1f 就拿数学库来说 xff0c 他的库
  • 如何在Java中调用Python

    Python语言有丰富的系统管理 数据处理 统计类软件包 xff0c 因此从java应用中调用Python代码的需求很常见 实用 DataX 是阿里开源的一个异构数据源离线同步工具 xff0c 致力于实现包括关系型数据库 MySQL Ora
  • ClickHouse 基于角色访问控制(RBAC)最佳实践

    本文介绍ClickHouse RBAC访问控制模型 包括如何启用SQL管理 xff0c 创建管理员用户 xff0c 创建角色 xff0c 授权 xff0c 细粒度列和行级授权 并通过示例进行验证实现过程 启用RBAC 在users xml中
  • R语言中mean函数

    mean函数是求算术平均值 用法 xff1a mean x trim 61 0 na rm 61 FALSE x是数值型 逻辑向量 trim表示截尾平均数 xff0c 0 0 5之间的数值 xff0c 如 xff1a 0 10表示丢弃最大1
  • 使用Spring @DependsOn控制bean加载顺序

    使用Spring 64 DependsOn控制bean加载顺序 spring容器载入bean顺序是不确定的 xff0c spring框架没有约定特定顺序逻辑规范 但spring保证如果A依赖B 如beanA中有 64 Autowired B
  • 使用R中merge()函数合并数据

    使用R中merge 函数合并数据 在R中可以使用merge 函数去合并数据框 xff0c 其强大之处在于在两个不同的数据框中标识共同的列或行 如何使用merge 获取数据集中交叉部分 merge 最简单的形式为获取两个不同数据框中交叉部分
  • 介绍java中Pair

    介绍java中Pair 在这篇文章中 xff0c 我们讨论了一个非常有用的编程概念 xff0c 配对 Pair 配对提供了一种方便方式来处理简单的键值关联 xff0c 当我们想从方法返回两个值时特别有用 在核心Java库中可以使用配对 Pa
  • python numpy 中linspace函数

    python numpy 中linspace函数 numpy提供linspace函数 有时也称为np linspace 是python中创建数值序列工具 与Numpy arange函数类似 xff0c 生成结构与Numpy 数组类似的均匀分
  • Spring框架学习重点概要笔记(一)

    spring框架的注解实现 xff1a xff08 1 xff09 首先在spring的核心配置文件中开启注解配置 xff1a xff08 2 xff09 64 Component 目前Spring中提供了四个注解 xff0c 相当于时Co
  • 做个爱读书的程序员

    很多时候我们抱怨工作过于忙碌 xff0c 疲于应付各种事情 但是往往即使有时间也总是会无所事事地浪费掉 xff0c 我们可以找很多理由去给自己解脱 xff0c 固然是想在忙碌之外给自己放松一下 xff0c 大多却是过于可惜的时候 今天跟一个
  • xming Error: Can‘t open display:

    运行 xclock xhost 报错 xff1a xming Error Can 39 t open display 需要安装xorg x11 xauth在运行 xclock 或 xhost root 64 stone yum y inst
  • onItemClickListener不起作用解决办法2(原创)

    写这边文章之前 xff0c 犹豫再三 xff0c 不知道会不会冒犯一位朋友 xff0c 他给我之前的一篇文章提出的意见 但我声明真心无意 xff0c 只是想把问题拿出来分析一下 xff0c 希望获得理解 listview在android开发
  • 关于STM32系列串口打印乱码原因解析

    STM32打印串口乱码 xff0c 如果你的配置确认没有问题 xff0c 那么最有可能是 HSE VALUE 这个值不对 xff0c 你可能使用的是一份demo程序 xff0c 而demo程序的时钟晶振和你的时钟晶振不一定都是一样 xff0
  • node.js提取html中的内部引入css和js代码,并修改为外部引入

    前提 xff1a 配置好node环境 xff0c 能够使用终端 xff08 cmd或Windows PowerShell xff09 node命令运行js文件 nodejs安装教程 某位大佬整理的nodejs入门教程 node xxx sp