webpack自定义插件 ChangeScriptSrcPlugin

插件文件

class ChangeScriptSrcPlugin {apply(compiler) {const pluginName = "ChangeScriptSrcPlugin";compiler.hooks.compilation.tap(pluginName, (compilation, callback) => {compilation.hooks.htmlWebpackPluginAlterAssetTags.tapAsync(pluginName,(htmlPluginData, callback) => {htmlPluginData.body.filter(item => {const { attributes } = item;return (attributes.src.includes("main") &&attributes.type === "text/javascript");}).forEach(ele => {ele.attributes.src = ele.attributes.src.replace("http://localhost:3000/","http://localhost:3000/");});callback(null, htmlPluginData);});});}
}module.exports = ChangeScriptSrcPlugin;

配置文件 webpack.config.js

// webpack.config.js
var ChangeScriptSrcPlugin = require('ChangeScriptSrcPlugin.js');module.exports = {// ... 这里是其他配置 ...plugins: [new ChangeScriptSrcPlugin()],
};

一、compiler 和 compilation的区别 和 作用

/** 1、compiler(编译器)  和 compilation(编译)的区别 和 作用* 打包是被细分为很多个子进度的。* compiler 是 webpack 打包过程的一个编译器,这个对象上有打包过程中的很多钩子函数。* compilation 是 compiler上的一个子进度,也包含了许多钩子函数。htmlWebpackPluginAlterAssetTags就是其中一个** 在编译的每个阶段中,任何插件都拥有对 compiler 对象的完全访问能力,* 并且在合适的时机,还可以访问当前的 compilation 对象。** compiler * 1. 包含整个构建流程的全部钩子,通过它可以把控整个 webpack 构建周期。* 2. 在运行期间 compiler 会根据 webpack 不同阶段触发的各种事件钩子,执行插件附加/绑定在 hook 上的函数。* 3. 只是负责维持生命周期运行的功能,所有的加载、打包和写入工作,都被委托到注册过的插件上了。* 4. 对象代表的是构建过程中不变的 webpack 环境,整个 webpack 从启动到关闭的生命周期。针对的是webpack。* * compilation * 1. 只代表一次新的编译,只要项目文件有改动,compilation 就会被重新创建。针对的是随时可变的项目文件。* 2. 负责:构建 module 和 chunk,并利用插件优化构建过程,同时把本次打包编译的内容全存到内存里作者:AizawaSayo
链接:https://www.jianshu.com/p/fb3a8182838c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。* */

2. htmlWebpackPluginAlterAssetTags 方法

/** 2、htmlWebpackPluginAlterAssetTags*  上边这个钩子函数,必须得让webpack使用  📚📚htmlWebpackPlugin📚 才能访问*  HtmlWebpackPlugin 简化了 HTML 文件的创建,以便为你的 webpack 包提供服务。这对于那些文件名中包含哈希值,并且哈希值会随着每次编译而改变的 webpack 包特别有用。* */

3. tabTable

/** 3、Tabable  类的方法* 参考 https://zhuanlan.zhihu.com/p/367931462 理解Tapable* Tabable * Tapable 使用时通常需要经历如下步骤:*  1. 创建钩子实例*  2. 调用【订阅接口】,【注册】回调,包括:tap、tapAsync、tapPromise*  3. 调用【发布接口】,【触发】回调,包括:call、callAsync、promise(之前我一直以为 发布订阅 是 先发布 再订阅,注册是在发布这一步做的。) ** 同步 hook 只能使用 tap 方法;而异步 hook 除了 tapAsync 和 tapPromise 这些异步方法,也支持用 tap 方法让 hook 以同步方式运行。* */

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/452866.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

N9305高品质mp3音频语音芯片ic在早教故事机的应用方案

随着人们对教育的重视程度不断提高,儿童早教机已经成为了很多家庭的教育必备品。N9305音乐芯片在早教故事机中的应用,不仅为孩子们带来了丰富多彩的故事世界,还以其卓越的音质表现和功能,进一步提升了早教体验。 九芯电子N9305高品…

HarmonyOS Next模拟器异常问题及解决方法

1、问题1:Failed to get the device apiVersion. 解决方法:关闭模拟器清除用户数据重启

Kafka之消费者组与消费者

消费者(Consumer)在Kafka的体系结构中是用来负责订阅Kafka中的主题(Topic),并从订阅的主题中拉取消息后进行处理。 与其他消息中间件不同,Kafka引入一个逻辑概念——消费组(Consumer Group&…

黑马程序员Java笔记整理(day03)

1.switch 2.for与while对比 3.嵌套定义,输出的区别性 4.break与continue 5.随机数生成的两种方式 6.Random 7.随机验证码

15分钟学Go 第2天:安装Go环境

第2天:安装Go环境 1. 引言 在学习Go语言之前,首先需要配置好本地开发环境。本节将详细介绍如何在Windows 11上安装和配置Go语言环境,包括安装步骤、环境变量设置、VS Code配置与测试、以及常见问题解决方案。完成这些步骤后,你将…

【计算机网络 - 基础问题】每日 3 题(四十九)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

基于模型设计的智能平衡移动机器人-基础实验SCI

目录 SCI通信 模型搭建 串口测试 实验结果 SCI通信 简单来说就是信号的传递。 SCI(Serial Communication Interface)意为“串行通信接口”,是相对于并行通信的,是串行通信技术的一种总称,最早由Motorola公司提出的。它是一…

Web Storage:数据储存机制

前言 在HTML5之前,开发人员一般是通过使用Cookie在客户端保存一些简单的信息的。在HTML5发布后,提供了一种新的客户端本地保存数据的方法,那就是Web Storage,它也被分为:LocalStorage和SessionStorage,它允…

【QT】常用控件(三)

个人主页~ 常用控件(一)~ 常用控件(二)~ QT中其他线程是改变不了GUI上的内容的,只有主线程可以 常用控件 四、显示类控件2、LCD Number3、ProgressBar4、Calendar Widget 五、输入类控件1、Line Edit正则表达式 2、Te…

【数据处理】大数据入门

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必备知识_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

UE小:UE5的Pixelstreaming在捕获画面的时候没办法显示非Viewport的Slate区域按钮的ToolTip

原始代码 首先&#xff0c;让我们看看原始代码片段&#xff1a; // Some widgets might want to provide an alternative Tooltip Handler. if (bCanSpawnNewTooltip || !NewTooltip) {TSharedPtr<SWidget> NewTooltipWidget NewTooltip ? NewTooltip->AsWidget()…

[含文档+PPT+源码等]精品基于springboot实现的原生微信小程序小区兼职系统

基于Spring Boot实现的原生微信小程序小区兼职系统背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、技术背景 移动互联网的普及&#xff1a;随着移动互联网的快速发展&#xff0c;微信小程序作为一种轻量级应用&#xff0c;因其无需下载安装、即用即走的特点&am…

【Next.js 项目实战系列】02-创建 Issue

原文链接 CSDN 的排版/样式可能有问题&#xff0c;去我的博客查看原文系列吧&#xff0c;觉得有用的话&#xff0c;给我的库点个star&#xff0c;关注一下吧 上一篇【Next.js 项目实战系列】01-创建项目 创建 Issue 配置 MySQL 与 Prisma​ 在数据库中可以找到相关内容&…

Greenhills学习总结

学习背景&#xff1a;近期参与xx项目过程中&#xff0c;遇到较多的关于代码集成编译的知识盲区&#xff0c;因此需要进行相关知识的学习和扫盲。 参考资料&#xff1a;GreenHills2017.7编译手册:本手册是GreenHills 2017.7.14版编译器的软件使用手册。该手册详细介绍了GreenHi…

数学中的直觉、联想和抽象漫谈

数学中的直觉、联想和抽象漫谈 直觉、联想和抽象不是孤立存在的&#xff0c;而是相互交织、共同作用的。构成了我们认知理解世界的不可或缺的三种能力。我们应该重视并培养这些思维能力&#xff0c;以更好地适应不断变化的世界。 在数学的世界里&#xff0c;直觉、联想和抽象是…

【每日一题】24.10.14 - 24.10.20

10.14 直角三角形1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 10.15 回文判定1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 10.16 二次方程1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 10.17 互质1. 题目2. 解题思路3…

UE5 gameplay学习1 蓝图修改材质和参数

第一种是直接修改这个材质&#xff0c;比较朴素 这个对象直接Set Material这个很直观就设置了 如果要设置材质的属性&#xff0c;就有一点奇怪了&#xff0c;通常来说get到material就能设置了&#xff0c;这里需要如下操作 create一个dynamic material instance 然后还要指定…

[JAVAEE] 线程安全问题

目录 一. 什么是线程安全 二. 线程安全问题产生的原因 三. 线程安全问题的解决 3.1 解决修改操作不是原子性的问题 > 加锁 a. 什么是锁 b. 没有加锁时 c. 加锁时 d. 死锁 e. 避免死锁 3.2 解决内存可见性的问题 > volatile关键字 (易变的, 善变的) a. 不加…

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

参考文章&#xff1a; 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境&#xff0c;均为 windows 环境&#xff0c;mac 环境其实也类似 ~ ① 编译proto文件&#xff0c;相关插件 简单介绍&#xff1a; protoc 是编译器&#xff0c;用于将…

AUTOSAR_EXP_ARAComAPI的5章笔记(17)

☞返回总目录 相关总结&#xff1a;AutoSar AP CM通信组总结 5.7 通信组 5.7.1 目标 通信组&#xff08;Communication Group&#xff0c;CG&#xff09;是由 AUTOSAR 定义的复合服务模板。它提供了一个通信框架&#xff0c;允许在 AUTOSAR 应用程序之间以对等方式和广播模…