十六、Webpack常见的插件和模式

news2024/11/18 21:32:40

一、认识插件Plugin

Webpack的另一个核心是Plugin,官方有这样一段对Plugin的描述:

  • While loaders are used to transform certain types of modules, plugins can be leveraged to perform a wider range 
    of tasks like bundle optimization, asset management and injection of environment variables.

上面表达的含义翻译过来就是:

  •  Loader是用于特定的模块类型进行转换;
  • Plugin可以用于 执行更加广泛的任务 ,比如打包优化、资源管理、环境变量注入等;
     

二、CleanWebpackPlugin

前面我们演示的过程中,每次修改了一些配置,重新打包时,都需要手动删除dist文件夹

  • 我们可以借助于一个插件来帮助我们完成,这个插件就是CleanWebpackPlugin

首先,我们先安装这个插件:

npm install clean-webpack-plugin -D

之后在插件中配置:

我们查看官网时发现CleanWebpackPlugin插件在常见插件列表中被移除了,不是不能用,但是能直接在配置里配置了。所以两个方法都能使用。

 三、HtmlWebpackPlugin

另外还有一个不太规范的地方:

  • 我们的HTML文件是编写在根目录下的,而最终打包的dist文件夹中是没有index.html文件的。
  • 进行项目部署的时,必然也是需要有对应的入口文件index.html
  • 所以我们也需要对index.html进行打包处理

对HTML进行打包处理我们可以使用另外一个插件:HtmlWebpackPlugin;

npm install html-webpack-plugin -D

 

生成之后的html文件里是不是跟我们之前写的入口文件一样?但是title是默认这个名字,我们也可以自定义title: 

四、生成index.html分析

我们会发现,现在自动在dist文件夹中,生成了一个index.html的文件:

  • 该文件中也自动添加了我们打包的bundle.js文件;

这个文件是如何生成的呢?

  • 默认情况下是根据 ejs的一个模板 来生成的;
  • 在html-webpack-plugin的源码中,有一个default_index.ejs模块; 

五、自定义HTML模板

如果我们想在自己的模块中加入一些比较特别的内容:

  • 比如添加一个noscript标签,在用户的JavaScript被关闭时,给予响应的提示;
  • 比如在开发vue或者react项目时,我们需要一个可以挂载后续组件的根标签 <div id="app"></div>;(html-webpack-plugin的源码中,这个default_index.ejs模块里没有可以挂在后续组件的跟标签,所以我得新建一个,在打包的时候我指定我想要的自定义模板)

这个我们需要一个属于自己的index.html模块:

六、自定义模板数据填充

上面的代码中,会有一些类似这样的语法<% 变量 %>,这个是EJS模块填充数据的方式。

在配置HtmlWebpackPlugin时,我们可以添加如下配置:

  • template: 指定我们要使用的模块所在的路径;
  • title: 在进行htmlWebpackPlugin.options.title读取时,就会读到该信息; 

 七、DefinePlugin的介绍

但是,这个时候编译还是会报错,因为在我们的模块中还使用到一个BASE_URL的常量

这是因为在编译template模块时,有一个BASE_URL:
  • <link rel="icon" href="<%= BASE_URL %>favicon.ico">
  • 但是我们并没有设置过这个常量值,所以会出现没有定义的错误; 

这个时候我们可以使用DefinePlugin插件;

DefinePlugin允许在编译时创建配置的全局常量,是一个webpack内置的插件(不需要单独安装):  ​​​​​

有同学好奇为啥这里有双引号,又加了单引号,因为这里双引号里面的内容会被当成js代码去执行,执行1+1=2,然后把执行结果的2放到双引号里面去。

但是现在我想给他传个字符串,怎么操作?所以得再加一个单引号, 

"'./'"

 
这个时候,编译template就可以正确的编译了,会读取到 BASE_URL的值
打包前:
在build目录下查看打包后的html文件:

当然了,这里面配置的全局常量不单单可以在这个里面可以使用,是可以在任何地方使用的。

我定义了下面这2个全局常量,然后在index.js文件中使用。

我们运行一下打包过后的index.html文件,查看一下打印结果,是不是能够打印出来哈:

八、Mode配置

Mode配置选项,可以告知webpack使用相应模式的内置优化:

  • 默认值是production(什么都不设置的情况下);
  • 可选值有:'none' | 'development' | 'production'

这几个选项有什么样的区别呢?

 更多Mode配置:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统转换-系统维护-净室软件工程-基于构件

系统转换-系统维护-净室软件工程-基于构件 系统转换系统转换系统维护净室软件工程基于构建的软件工程 系统转换 改造 继承 集成 淘汰 系统转换 直接转换 并行转换 分段转换&#xff1a;子系统之间的并行转换 系统维护 重点 净室软件工程 预防大于检查 基于构建的软件工程 复用而…

win11无法加载文件,因为在此系统上禁止运行脚本

问题背景&#xff1a; 最近升级了windows11&#xff0c;文件右键打开终端&#xff0c;默认是使用的powershell。 后面安装npm包依赖的时候&#xff0c;遇到了无法加载文件&#xff0c;因为在此系统上禁止运行脚本。 提示中可以通过访问链接查看&#xff1a;https:\go.micros…

Java笔记040-反射/反射机制、Class类

目录 反射(reflection) 一个需求引出反射 反射机制 Java反射机制原理图 Java反射机制可以完成 反射相关的主要类 反射机制的优点和缺点 反射调用优化-关闭访问检查 Class类 基本介绍 代码解释部分 类加载方法 应用实例&#xff1a;Class02.java 获取Class类对象 …

【MFC】实现简单UDP通信

创建项目&#xff0c;初始化套接字 创建一个基于对话框的MFC项目&#xff08;名称为UDP&#xff09;&#xff0c;高级功能选中Windows套接字 这个时候在CUDP类的InitInstance()方法中就会出现这样的代码用来初始化套接字 if (!AfxSocketInit()) {AfxMessageBox(IDP_SOCKETS_…

APC注入进阶“Early Bird”

序 APC注入在前面的章节已经给大家讲过&#xff0c;基本原理也是老生常谈的内容了&#xff1a; APC注入可以让一个线程在它正常的执行路径运行之前执行一些其他的代码&#xff0c;每一个线程都有一个附加的APC队列&#xff0c;他们在线程处于可警告的时候才被处理&#xff1b;…

【JAVA-Day04】Java关键字和示例:深入了解常用关键字的用法

Java关键字和示例&#xff1a;深入了解常用关键字的用法 摘要Java 关键字、标识符和命名规范一、Java 关键字常用关键字DEMO1. 示例代码使用 if 和 else 关键字&#xff1a;2. 示例代码使用 for 循环&#xff1a;3. 示例代码使用 switch 关键字&#xff1a;4. 示例代码使用 wh…

2022年第一界HiPChips解读

High Performance Chiplet and Interconnect Architectures&#xff0c;2022年6月19日&#xff0c;第一届会议&#xff08;连同第49界ISCA会议&#xff09;于美国纽约举行。 第一届会议议程及slice&#xff1a;(HiPChips Chiplet Workshop ISCA Conference)[https://www.open…

使用TCP方式拉取Canal数据

1 Canal对接Kafka联调 1.1 配置修改 canal.properties 修改 zk&#xff1a; canal.zkServers 10.51.50.219:2181instance.properties 开启配置项&#xff1a; canal.mq.dynamicTopic 是 Canal 的 MQ 动态 Topic 配置项&#xff1a; test_javaedge_01 是kafka 的 topicte…

混合云代表,青云科技QingCloud从此走向小而美之路

你有你的活法&#xff0c; 我有我的活法 只要活出自己&#xff0c; 活出个样子都是美事 【全球元观察 &#xff5c; 热点关注】 刚注意到青云科技QingCloud的最新发布2023年半年度报告&#xff0c;2023上半年同比减亏约7000万元&#xff0c;研发人员减少83人。从这两个数字…

贝wa儿歌(安卓)

本次贝wa儿歌为大家提供的是特殊版本的&#xff0c;软件需要注册登录才能才能使用VIP权限&#xff0c;安装好后&#xff0c;打开如果提示更新请点击取消&#xff0c;一定不要更新哦。 贝瓦儿歌不仅只是儿歌&#xff0c;其实有很多分类的&#xff0c;包括有国学&#xff0c;动画…

小米6/6X/米8/米9手机刷入鸿蒙HarmonyOS.4.0系统-刷机包下载-遥遥领先

小米手机除了解锁root权限&#xff0c;刷GSI和第三方ROM也是米粉的一大爱好&#xff0c;这不&#xff0c;在华为发布了HarmonyOS.4.0系统后不久&#xff0c;我们小米用户也成功将自己的手机干山了HarmonyOS.4.0系统。虽然干上去HarmonyOS.4.0系统目前BUG非常多&#xff0c;根本…

系统架构:软件工程速成

文章目录 参考第一章 概述软件工程概述软件过程 参考 软件工程速成(期末考研复试软考)均适用. 支持4K 第一章 概述 软件工程概述 定义&#xff1a;采用工程的概念、原理、技术和方法来开发与维护软件。 三要素&#xff1a; 方法&#xff1a;完成软件开发各项任务的技术方…

人工智能AI 全栈体系(二)

第一章 神经网络是如何实现的 上节描述的网络结构比较特殊&#xff0c;不具有一般性。比如前面我们讲过的权重都是1或者-1&#xff0c;这是很特殊的情况&#xff0c;实际上权重可以是任何数值&#xff0c;可以是正的&#xff0c;也可以是负的&#xff0c;也可以是带小数的。权…

网络安全岗位面试经验总结(附面试题)

思路流程: 信息收集 服务器的相关信息&#xff08;真实ip&#xff0c;系统类型&#xff0c;版本&#xff0c;开放端口&#xff0c;WAF等&#xff09; 网站指纹识别&#xff08;包括&#xff0c;cms&#xff0c;cdn&#xff0c;证书等&#xff09;&#xff0c;dns记录 whois信…

Linux工具——gcc

目录 一&#xff0c;gcc简介 二&#xff0c;C语言源文件的编译过程 1.预处理 2.编译 3.汇编 4.链接 5.动静态库 一&#xff0c;gcc简介 相信有不少的小白和我一样在学习Linux之前只听说过visual studio。其实这个gcc这个编译器实现的功能便是和visual studio一样的功能&…

纷享销客入选中国信通院《高质量数字化转型产品及服务全景图》

近期&#xff0c;在中国信息通信研究院主办的“2023数字生态发展大会”暨中国信通院“铸基计划”年中上&#xff0c;重磅发布了《高质量数字化转型产品及服务全景图&#xff08;2023&#xff09;》&#xff0c;纷享销客凭借先进的技术能力和十余年客户业务场景应用理解&#xf…

Linux fcntl函数

/*#include <unistd.h>#include <fcntl.h>int fcntl(int fd, int cmd, ... ); 参数&#xff1a;- fd&#xff1a;需要操作的文件描述符- cmd&#xff1a;表示对文件描述符如何操作- F_DUPFD:复制文件描述符&#xff0c;复制的是参数fd&#xff0c;得到一个新的文件…

LeetCode:2. 两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

Java学习笔记------抽象类和抽象方法

抽象方法 抽象方法&#xff1a;将共性的行为&#xff08;方法&#xff09;抽取到父类之后&#xff0c;由于每一个子类执行的内容是不一样的&#xff0c;所以&#xff0c;在父类中不能确定具体的方法体&#xff0c;该方法就可以定义为抽象方法抽象类&#xff1a;如果一个类中存…

d3.js 的使用

这篇文章相当于之前 svg 的补充。 因为 svg 代码肯定不是人为去专门写的。 在这里推荐制作 svg 的第三方库 - D3.js 用于定制数据可视化的JavaScript库 - D3 官网地址&#xff1a; D3 by Observable | The JavaScript library for bespoke data visualization 简单使用 画…