Webpack常见的插件和模式

文章目录

  • 一、认识插件Plugin
    • 1.认识Plugin
  • 二、CleanWebpackPlugin
  • 三、HtmlWebpackPlugin
    • 1.生成index.html分析
    • 2.自定义HTML模板
    • 3.自定义模板数据填充
  • 四、DefinePlugin
    • 1.DefinePlugin的介绍
    • 2.DefinePlugin的使用
  • 五、Mode配置

一、认识插件Plugin

1.认识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

之后在插件中配置:

const { CleanWebpackPlugin } = require('clean-webpack-plugin')

module.exports = {
    plugins: [
        new CleanWebpackPlugin()
    ]
}

三、HtmlWebpackPlugin

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

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

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

npm install html-webpack-plugin -D
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    plugins: [
        new HtmlWebpackPlugin({
          title: "webpack-demo"
        })
    ]
}

1.生成index.html分析

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

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

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

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

2.自定义HTML模板

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

  • 比如添加一个noscript标签,在用户的JavaScript被关闭时,给予响应的提示;
  • 比如在开发vue或者react项目时,我们需要一个可以挂载后续组件的根标签;

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

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

3.自定义模板数据填充

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

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

  • template:指定我们要使用的模块所在的路径
  • title:在进行htmlWebpackPlugin.options.title读取时,就会读到该信息;
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    plugins: [
        new HtmlWebpackPlugin({
          title: "webpack-demo",
          template: "./index.html"  
        })
    ]
}

四、DefinePlugin

1.DefinePlugin的介绍

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

这是因为在编译template模块时,有一个BASE_URL:

  • <link rel=“icon” href=“<%= BASE_URL %>favicon.ico”>;
  • 但是我们并没有设置过这个常量值,所以会出现没有定义的错误;

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

2.DefinePlugin的使用

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

const { DefinePlugin } = require("webpack")

module.exports = {
    plugins: [
        new DefinePlugin({
          BASE_URL: "'./'",
          coder: "'codermq'"
        })
    ]
}

这个时候,编译template就可以正确的编译了,会读取到BASE_URL的值;

五、Mode配置

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

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

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

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HMS Core】机器学习服务热门问题合集

【关键词】 机器学习服务、文本识别、身份证识别 【问题描述1】 机器学习服务的文本识别能力&#xff0c;是否支持草书等&#xff1f; 【解决方案】 草书是不支持的&#xff0c;目前建议使用较为规范的字体测试。 【问题描述2】 机器学习服务是否支持训练模型&#xff1f;…

Flink on yarn 加载失败plugins失效问题解决

Flink on yarn 加载失败plugins失效问题解决 flink版本&#xff1a;1.13.6 1. 问题 flink 任务运行在yarn集群,plugins加载失效,导致通过扩展资源获取任务参数失效 2. 问题定位 yarn容器的jar包及插件信息,jar包是正常上传 源码定位 加载plugins入口&#xff0c;TaskMana…

Mysql权限控制语句

1.创建用户 create user ky32localhost IDENTIFIED by 123456 create user&#xff1a;创建用户开头 ky32&#xff1a;用户名 localhost 新建的用户可以在哪些主机上登录 即可以使用ip地址&#xff0c;网段主机名 ky32localhost ky32192.168.233.22 ky32192.168.233.0/2…

如何在mac 安装 cocos 的 android环境

基本概念&#xff1a; Java: Java 是一种编程语言&#xff0c;由Sun Microsystems&#xff08;现在是 Oracle Corporation&#xff09;开发。Java 是一种跨平台的语言&#xff0c;可以用于开发各种应用程序&#xff0c;包括 Android 应用程序。Android 应用程序的核心代码通常用…

在 Visual Studio 中远程调试 C++ 项目

目录 一、说明二、下载远程工具1. 官网下载2. 自己电脑上拷贝 三、 运行远程工具四、本机Visual Studio配置五、自动部署 一、说明 参考官方文档&#xff1a;https://learn.microsoft.com/zh-cn/visualstudio/debugger/remote-debugging-cpp?viewvs-2022 二、下载远程工具 …

AutoX.js - openCV多分辨率找图

AutoX.js - openCV多分辨率找图 一、起因 AutoXjs 中有两个找图相关的方法 findImage 和 matchTemplate&#xff0c;之前一直没发现什么问题&#xff0c;但最近在一次测试找图时&#xff0c;明明大图和模板图的轮廓都清晰&#xff0c;却怎么也找不到图&#xff0c;降低阈值参…

vue-resource发送数据请求

vue-resource是Vue用于发送数据请求的一个插件库&#xff0c;在Vue1.0版本时使用比较频繁&#xff0c;现在Vue作者更支持使用axios进行数据发送。 一、安装vue-resource库 npm i vue-resource 二、使用vue-resource插件 使用插件之前需要先对插件进行引入 三、使用$http发送…

博弈论学习笔记(2)——完全信息静态博弈

前言 这部分我们学习的是完全信息静态博弈&#xff0c;主要内容包括博弈论的基本概念、战略式博弈、Nash均衡、Nash均衡解的特性、以及Nash均衡的应用。 零、绪论 1、什么是博弈论 1&#xff09;博弈的定义 博弈论&#xff1a;研究决策主体的行为发生直接相互作用时候的决策…

前度开发面试题

面试题总结 vue页面跳转会经过两个钩子函数beforeEach、afterEach 组见守卫 beforeRouteEnter前置组见守卫 *beforeRouteUpdate更新之前 watch和computed区别 数据没有改变&#xff0c;则 computed 不会重新计算&#xff09;。若没改变&#xff0c;计算属性会立即返回之前缓…

【Postgres】Postgres常用命令

文章目录 1、导出数据库某张表2、导入某张表到数据库3、查看数据库占用磁盘页数情况4、查看数据库大小5、查看数据表大小6、查看索引大小7、对数据库中表索引按照大小排序8、对数据库中表按照大小排序9、回收空间&#xff08;建议先回收指定表&#xff09;10、设置主键自增序列…

想做短视频,但是没有经验,不会拍、不会剪、不会写脚本怎么办?

现在很多人都准备进入短视频领域&#xff0c;让自己多一份收入。不过有个很现实的问题&#xff0c;不会拍、不会剪、也不会写脚本怎么办&#xff0c;还能做短视频吗&#xff1f; 如果是完全不会&#xff0c;那么初期肯定是要学习一些基础知识的&#xff0c;比如基础的拍摄技巧…

k8s从私有仓库拉取镜像

从私有仓库拉取镜像 | Kubernetes 准备开始 你必须拥有一个 Kubernetes 的集群&#xff0c;同时你必须配置 kubectl 命令行工具与你的集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。可以通过 Minikube 构建一个你自己的集群&#xff0c;或者你可以…

二十二、Arcpy批量波段组合——结合Landat数据城市建成区提取

一、前言 其实波段组合和GIS中栅格计算有点类似,实质上就是对每个像素点对应的DN值进行数学计算,也就是可以进行运算表达式是三个或多个变量相加、相减……每一个变量对应于一个图像数据,对这三个或多个图像数据求值并输出结果图像。 二、具体操作 1、实验具体目标 将202…

英语——歌曲篇——only you

《only you》(只有你)赏析 很多人都听过The Platters(派特斯乐队)演唱的《only you》(只有你)这首歌曲&#xff0c;尤其是看过在周星驰和罗家英在《大话西游》里面演绎的"无厘头"版本后。 不过&#xff0c;又有几人知道&#xff0c;这首歌曲原来是经典浪漫影片《罗马…

【Docker】Linux网络命名空间

命名空间 Namespace是Linux提供的一种对于系统全局资源的隔离机制&#xff1b;从进程的视角来看&#xff0c;同一个namespace中的进程看到的是该namespace自己独立的一份全局资源&#xff0c;这些资源的变化只在本namespace中可见&#xff0c;对其他namespace没有影响。容器就…

python 练习 在列表元素中合适的位置插入 输入值

目的&#xff1a; 有一列从小到大排好的数字元素列表&#xff0c; 现在想往其插入一个值&#xff0c;要求&#xff1a; 大于右边数字小于左边数字 列表元素&#xff1a; [1,4,6,13,16,19,28,40,100] # 方法&#xff1a; 往列表中添加一个数值&#xff0c;其目的方便元素位置往后…

操作系统:内存管理(二)虚拟内存管理

一战成硕 3.2 虚拟内存管理3.2.1 虚拟内存的基本概念3.2.2 请求分页管理方式3.2.3 页框分配3.2.4 页面置换算法3.2.5 抖动和工作集 3.2 虚拟内存管理 3.2.1 虚拟内存的基本概念 3.2.2 请求分页管理方式 页表机制 缺页中断机制 地址变换机构 3.2.3 页框分配 驻留集大小 内…

一致性哈希揭秘,深入解析其工作原理

前言 在进行一致性哈希介绍前&#xff0c;先思考2个问题&#xff1a; 什么是Hash一致性Hash和Hash的关系是什么 对于第一个问题Hash的定义 Hash也成散列&#xff0c;基本原理就是把任意长度的输入&#xff0c;通过hash算法变成固定长度的输出。 对于第二个问题&#xff0c…

gitee上传项目

目录 首先在gitee新建一个仓库 接下来创建好项目&#xff0c;先找到生成公钥SSH的目录 接下来是生成公钥SSH 仓库创建好后&#xff0c;接着开始链接项目 首先在gitee新建一个仓库 接下来创建好项目&#xff0c;先找到生成公钥SSH的目录 接下来是找目录&#xff1a;C盘&a…

Karate轻松实现自动API测试

如果您想做自动API测试&#xff0c;但没有编程背景&#xff0c;那么你必须要给Karate一个机会&#xff01; Karate由Intuit作为开源工具发布。该工具旨在用于自动API测试&#xff0c;并具有使API测试变得轻而易举且实际上令人愉快的所有必需功能。 与需要大量编码的其他自动化…