webpack 常用插件

  1. clean-webpack-plugin
    这个插件的主要作用是清除构建目录中的旧文件,以确保每次构建时都能得到一个干净的环境。
var { CleanWebpackPlugin } = require("clean-webpack-plugin")
const path = require("path");module.exports = {mode: "development",devtool: "source-map",output: {path: path.resolve(__dirname, "dist"),filename: "[name].[chunkhash:5].js"},plugins: [new CleanWebpackPlugin()]
}

默认情况下,CleanWebpackPlugin 会清除输出目录(即 output.path 指定的目录)中的所有文件和子目录。如果您想自定义哪些文件或目录需要被清除,您可以在创建 CleanWebpackPlugin 实例时传递一个选项

new CleanWebpackPlugin({cleanOnceBeforeBuildPatterns: ['**/*', '!/important-file.txt'],
})

在这个例子中,cleanOnceBeforeBuildPatterns 选项是一个字符串数组,用于指定需要被清除的文件或目录。在这个例子中,所有文件和目录都会被清除,但是名为 ‘important-file.txt’ 的文件将被排除在清除之外。

  1. html-webpack-plugin
    在 Webpack 中,html-webpack-plugin 是一个用于生成 HTML 文件的插件。template 参数是这个插件的一个重要配置选项,它指定了要使用的 HTML 模板文件的路径。

当您使用 html-webpack-plugin 时,通常会提供一个 HTML 模板文件,该文件包含了网站的基本结构和引用。html-webpack-plugin 会读取这个模板文件,并根据您的 Webpack 配置和入口点来生成最终的 HTML 文件。
chunks 参数是这个插件的一个重要配置选项,它指定了应该在最终生成的 HTML 文件中包含哪些 chunk(即代码块)

const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')
const path = require("path");
module.exports = {mode: "development",devtool: "source-map",entry: {home: "./src/index.js",a: "./src/a.js"},output: {path: path.resolve(__dirname, "dist"),filename: "scripts/[name].[chunkhash:5].js"},plugins: [new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: ["dist/**/*"] }),new HtmlWebpackPlugin({template: "./public/index.html",filename: "home.html",chunks: ["home"]}),new HtmlWebpackPlugin({template: "./public/index.html",filename: "a.html",chunks: ["a"]})]
}
  1. copy-webpack-plugin
    复制某个文件或整个文件夹到生成目录中
const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyPlugin = require('copy-webpack-plugin');
const path = require("path");
module.exports = {mode: "development",devtool: "source-map",output: {path: path.resolve(__dirname, "dist"),filename: "scripts/[name].[chunkhash:5].js"},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: "./public/index.html"}),new CopyPlugin([{ from: "./public", to: "./" }])]
}

在这里插入图片描述
复制public下的文件和文件夹到dist目录下。

  1. webpack-dev-server
    open:true,告诉 dev-server 在服务器已经启动后打开浏览器。设置其为 true 以打开你的默认浏览器。
const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {mode: "development",devtool: "source-map",output: {filename: "scripts/[name].[chunkhash:5].js"},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: "./public/index.html"})],devServer: {port: 8000,open: true,proxy: { //代理规则"/api": {target: "https://www.bing.com",changeOrigin: true //更改请求头中的host和origin}}},stats: {modules: false,colors: true}
}
  1. file-loader url-loader

file-loader 和 url-loader 都是 Webpack 的加载器(loaders),它们的作用如下:
file-loader:
描述:将文件发送到输出目录,并返回(相对)URL。
用途:通常用于处理图片、字体等文件资源。
配置:您可以通过在 Webpack 配置文件中添加 file-loader 来使用这个加载器。
url-loader:
描述:如果文件大小小于指定的大小,则将文件转换为 base64 URL,否则使用 file-loader 进行处理。
用途:通常与 file-loader 一起使用,用于处理较小的文件资源,将其转换为 base64 URL,以减少 HTTP 请求。
配置:您可以通过在 Webpack 配置文件中添加 url-loader 来使用这个加载器。
总的来说,file-loader 主要用于处理文件资源,而 url-loader 则在 file-loader 的基础上增加了对较小文件的处理能力,以减少 HTTP 请求。

const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {mode: "development",devtool: "source-map",output: {filename: "scripts/[name].[chunkhash:5].js"},module: {rules: [{test: /\.(png)|(gif)|(jpg)$/,use: [{loader: "url-loader",options: {// limit: false //不限制任何大小,所有经过loader的文件进行base64编码返回limit: 100 * 1024, //只要文件不超过 100*1024 字节,则使用base64编码,否则,交给file-loader进行处理name: "imgs/[name].[hash:5].[ext]"}}]}]},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: "./public/index.html"})],devServer: {open: true},stats: {modules: false,colors: true}
}

解决路径问题

在使用file-loader或url-loader时,可能会遇到一个非常有趣的问题
比如,通过webpack打包的目录结构如下:

dist|—— img|—— a.png  #file-loader生成的文件|—— scripts|—— main.js  #export default "img/a.png"|—— html|—— index.html #<script src="../scripts/main.js" ></script>

这种问题发生的根本原因:模块中的路径来自于某个loader或plugin,当产生路径时,loader或plugin只有相对于dist目录的路径,并不知道该路径将在哪个资源中使用,从而无法确定最终正确的路径
面对这种情况,需要依靠webpack的配置publicPath解决

const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {mode: "development",devtool: "source-map",output: {filename: "scripts/[name].[chunkhash:5].js",// publicPath: "/"  //配置关闭时,html文件里的script标签是<script defer src="../scripts/main.e5bb4.js"></script>。配置是'/'时,html文件里的script标签是<script defer src="/scripts/main.c9195.js"></script>},module: {rules: [{test: /\.(png)|(gif)|(jpg)$/,use: [{loader: "file-loader",options: {name: "imgs/[name].[hash:5].[ext]"}}]}]},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: "./public/index.html",filename: "html/index.html"})],devServer: {open: true,openPage: "html/index.html",},stats: {modules: false,colors: true}
}

在 Webpack 中,output.publicPath 是一个配置项,它用于指定在引用资源(如图片、字体等)时应该使用的公共路径。

当您在开发环境中使用 Webpack 时,通常会将资源文件(例如 CSS、JS、图片等)放在一个服务器上,并通过一个 URL 来访问这些文件。然而,如果您的资源文件和您的 HTML 文件(即入口文件)不在同一个域名下,那么浏览器可能会阻止您加载这些资源,因为它们被视为跨域请求。

为了解决这个问题,您可以使用 output.publicPath 来告诉 Webpack 在生成资源文件 URL 时应该使用什么样的公共路径。例如,如果您的资源文件放在 https://cdn.example.com/assets/ 这个 URL 下,您可以这样配置 publicPath

module.exports = {//...output: {publicPath: 'https://cdn.example.com/assets/',},
};

然后,Webpack 就会在生成资源文件 URL 时,自动为这些文件添加 publicPath 作为前缀。例如,如果 Webpack 生成了一个名为 main.js 的 JavaScript 文件,并且 publicPath 被设置为 https://cdn.example.com/assets/,那么最终生成的 URL 可能看起来像这样:https://cdn.example.com/assets/main.js

需要注意的是,publicPath 的值也可以是一个相对路径。例如,如果您的资源文件放在与 HTML 文件相同的域名下,但是位于不同的目录中,您可以这样配置 publicPath

module.exports = {//...output: {publicPath: '/assets/',},
};

在这个例子中,publicPath 被设置为 /assets/,这意味着资源文件会被放置在与 HTML 文件相同域名的根目录下的 /assets/ 目录下。

  1. 内置插件 DefinePlugin BannerPlugin ProvidePlugin

DefinePlugin 允许在 编译时 将你代码中的变量替换为其他值或表达式。这在需要根据开发模式与生产模式进行不同的操作时,非常有用。例如,如果想在开发构建中进行日志记录,而不在生产构建中进行,就可以定义一个全局常量去判断是否记录日志。这就是 DefinePlugin 的发光之处,设置好它,就可以忘掉开发环境和生产环境的构建规则。

请注意,由于本插件会直接替换文本,因此提供的值必须在字符串本身中再包含一个 实际的引号 。通常,可以使用类似 ‘“production”’ 这样的替换引号,或者直接用 JSON.stringify(‘production’)。
为每个 chunk 文件头部添加 banner。

ProvidePlugin自动加载模块,而不必导入或随处要求这些模块。

所有的webpack内置插件都作为webpack的静态属性存在的,使用下面的方式即可创建一个插件对象

const webpack = require("webpack")new webpack.插件名(options)

DefinePlugin

全局常量定义插件,使用该插件通常定义一些常量值,例如:

new webpack.DefinePlugin({PI: `Math.PI`, // PI = Math.PIVERSION: `"1.0.0"`, // VERSION = "1.0.0"DOMAIN: JSON.stringify("duyi.com")
})

这样一来,在源码中,我们可以直接使用插件中提供的常量,当webpack编译完成后,会自动替换为常量的值

BannerPlugin

它可以为每个chunk生成的文件头部添加一行注释,一般用于添加作者、公司、版权等信息

new webpack.BannerPlugin({banner: `hash:[hash]chunkhash:[chunkhash]name:[name]author:yuanjincorporation:duyi`
})

ProvidePlugin

自动加载模块,而不必到处 import 或 require

new webpack.ProvidePlugin({$: 'jquery',_: 'lodash'
})

然后在我们任意源码中:

$('#item'); // <= 起作用
_.drop([1, 2, 3], 2); // <= 起作用

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

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

相关文章

MATLAB 2024a软件下载安装教程

1-首先下载Matlab&#xff0c;以下迅雷云链接&#xff0c;里面有全版本的matlab&#xff0c;根据自己的需要下载即可&#xff0c;建议下载最新版的&#xff0c;功能会更多&#xff0c;当然内存也会更大。 迅雷云盘迅雷云盘https://pan.xunlei.com/s/VNgH_6VFav8Kas-tRfxAb3XOA…

大数据面试题 —— Spark数据倾斜及其解决方案

目录 1 调优概述2 数据倾斜发生时的现象3 数据倾斜发生的原理4 如何定位导致数据倾斜的代码4.1 某个 task 执行特别慢的情况4.2 某个 task 莫名其妙内存溢出的情况5 查看导致数据倾斜的 key 的数据分布情况6 数据倾斜的解决方案6.1 使用 Hive ETL 预处理数据6.2 过滤少数导致倾…

神之浩劫2下载教程 MOBA新游神之浩劫2在哪下载/怎么下载

《神之浩劫2Smite 2》重新定义了MOBA游戏的征服模式&#xff0c;为玩家带来更多的互动和进展。最近的开发者深度挖掘展示了游戏地图的全新设计&#xff0c;既简化了基本操作&#xff0c;又丰富了游戏选择。游戏中的敌人也有了新的进展方式。例如&#xff0c;击败火巨人和金之怒…

vue 脚手架 创建vue3项目

创建项目 命令&#xff1a;vue create vue-element-plus 选择配置模式&#xff1a;手动选择模式 (上下键回车) 选择配置&#xff08;上下键空格回车&#xff09; 选择代码规范、规则检查和格式化方式: 选择语法检查方式 lint on save (保存就检查) 代码文件中有代码不符合 l…

如何运用结构化思维来规划个人发展

结构化思维不仅在工作中非常有用&#xff0c;在日常生活中同样可以发挥巨大作用。无论是解决家庭琐事、规划个人发展&#xff0c;还是做出重要决策&#xff0c;结构化思维都能帮助我们更有条理地思考和行动。 一、解决生活中的问题 生活中总会遇到各种各样的问题&#xff0…

力扣HOT100 - 131. 分割回文串

解题思路&#xff1a; class Solution {List<List<String>> res new ArrayList<>();List<String> pathnew ArrayList<>();public List<List<String>> partition(String s) {backtrack(s,0);return res;}public void backtrack(Str…

vue知识

一、初始vue Vue核心 Vue简介 初识 (yuque.com) 1.想让Vue工作&#xff0c;就必须创建一个Vue实例&#xff0c;且要传入一个配置对象 2.root容器里的代码依然符合html规范&#xff0c;只不过混入了一些特殊的Vue语法 3.root容器里的代码被称为【Vue模板】 4.Vue实例和容器…

Web-SpringBootWeb

创建项目 后面因为报错&#xff0c;所以我把jdk修改成22&#xff0c;仅供参考。 定义类&#xff0c;创建方法 package com.start.springbootstart.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotati…

手机运营商二要素验证接口:确保业务操作安全可靠

手机运营商二要素验证接口是一种通过与电信运营商合作的方式&#xff0c;检验手机用户的手机号码与姓名是否一致的服务。这个接口可以广泛应用于各种需要用户实名认证的场景&#xff0c;例如电商、游戏、直播以及金融等行业。 这个接口的作用非常重要&#xff0c;它可以帮助企…

简要说说软分叉和硬分叉。

前言 一、软分叉 二、硬分叉 三、用途 总结 前言 软分叉和硬分叉是区块链技术中的两个重要概念&#xff0c;它们通常与加密货币的网络升级有关。下面我将分别解释这两个概念&#xff0c;并提供一些例子来帮助理解。下面是方便理解软分叉和硬分叉的图 一、软分叉 软分叉是一…

QT程序通过GPIB-USB-HS转接线控制数字万用表

1、硬件准备 1.1、数字万用表 型号 &#xff1a;Agilent 34401A 前面图示&#xff1a; 后面图示&#xff1a;有GPIB接口 1.2、GPIB-USB-HS转接线 2、GPIB协议基础了解 2.1、引脚 8条数据线&#xff1a;DIO1 ~ DIO8 5条管理线&#xff1a;IFC、ATN、REN、EOI、SRQ 3条交握线…

C# Web控件与数据感应之 ListControl 类

目录 关于数据感应 ListControl 类类型控件 范例运行环境 数据感应通用方法 设计 实现 调用示例 数据源 调用 小结 关于数据感应 数据感应也即数据捆绑&#xff0c;是一种动态的&#xff0c;Web控件与数据源之间的交互&#xff0c;诸如 System.Web.UI.WebControls 里…

基于FPGA的数字信号处理(2)--什么是定点数?

在实际的工程应用中&#xff0c;往往会进行大量的数学运算。运算时除了会用到整数&#xff0c;很多时候也会用到小数。而我们知道在数字电路底层&#xff0c;只有「高电平1」和「低电平0」的存在&#xff0c;那么仅凭 0和1 该如何表示小数呢&#xff1f; 数字电路中&#xff0…

鸿蒙原生应用元服务开发-Web加载本地页面

将本地页面文件放在应用的rawfile目录下&#xff0c;开发者可以在Web组件创建的时候指定默认加载的本地页面 &#xff0c;并且加载完成后可通过调用loadUrl()接口变更当前Web组件的页面。 在下面的示例中展示加载本地页面文件的方法&#xff1a; 将资源文件放置在应用的resou…

Arcpy入门学习笔记(三):数据属性的读取

Arcpy入门学习笔记&#xff08;三&#xff09;&#xff1a;数据属性的获取 文章目录 Arcpy入门学习笔记&#xff08;三&#xff09;&#xff1a;数据属性的获取常用的属性Describe对象属性&#xff08;部分&#xff09;数据集属性&#xff08;部分&#xff09;表属性&#xff0…

锂电池SOH预测 | 基于LSTM的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

[docker] 多容器项目 - PHP+MySQL+Nginx+utility containers

[docker] 多容器项目 - PHPMySQLNginxutility containers 这个项目总共会配置 6 个容器&#xff0c;主要还是学习一下 docker 的使用和配置&#xff0c;目标是&#xff1a; 本机不安装 PHP、Nginx 安装部分全都交给 docker 容器实现 可以运行一个 Laravel 网页项目 修改本机…

基于遗传算法的TSP算法(matlab实现)

一、理论基础 TSP(traveling salesman problem,旅行商问题)是典型的NP完全问题&#xff0c;即其最坏情况下的时间复杂度随着问题规模的增大按指数方式增长&#xff0c;到目前为止还未找到一个多项式时间的有效算法。TSP问题可描述为&#xff1a;已知n个城市相互之间的距离&…

万兆以太网MAC设计(12)万兆UDP协议栈上板与主机网卡通信

文章目录 一、设置IP以及MAC二、上板效果2.1、板卡与主机数据回环测试2.2、板卡满带宽发送数据 一、设置IP以及MAC 顶层模块设置源MAC地址 module XC7Z100_Top#(parameter P_SRC_MAC 48h01_02_03_04_05_06,parameter P_DST_MAC 48hff_ff_ff_ff_ff_ff )(input …

开源代码分享(26)-考虑预测不确定性的综合能源调度优化

参考文献&#xff1a; [1]崔杨,周慧娟,仲悟之,等.考虑源荷两侧不确定性的含风电电力系统低碳调度[J].电力自动化设备,2020,40(11):85-93.DOI:10.16081/j.epae.202009019. 1.基本原理 考虑碳交易机制能够有效提高风电消纳量&#xff0c;但是随着风电并网容量的增大&#xff0c…