Webpack 基础以及常用插件使用方法

目录

    • 一、前言
    • 二、修改打包入/出口
      • 配置步骤
    • 三、常用插件使用
      • html-webpack-plugin
      • 打包 CSS 代码
      • 提取 CSS 代码
      • 优化压缩过程
      • 打包 less 代码
      • 打包图片文件

一、前言

本质上,Webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。
如果对你有帮助,欢迎三连 收藏点赞关注!!!

---- NickYoung


概念 | webpack 中文文档

二、修改打包入/出口

配置步骤

  • 项目根目录,新建 Webpack.config.js 配置文件
  • 导出配置对象,配置入口,出口文件路径(别忘了修改磁盘文件夹和文件的名字)
  • 重新打包观察
const path = require('path')module.exports = {entry: path.resolve(__dirname, 'src/login/index.js'),output: {path: path.resolve(__dirname, 'dist'),filename: './login/index.js'  }
}

image-20230518101043103.png

三、常用插件使用

html-webpack-plugin

让 Webpack 拥有自动生成 html 文件能力,并引入打包后的其他资源

  • 步骤:
    • 下载 html-webpack-plugin 本地软件包到项目中
npm i html-webpack-plugin --save-dev
  • 配置 webpack.config.js 让 Webpack 拥有插件功能
// ...
const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {// ...plugins: [new HtmlWebpackPlugin({template: './public/login.html', // 模板文件filename: './login/index.html' // 输出文件})]
}
  • 指定以 public/login.html 为模板复制到 dist/login/index.html,并自动引入其他打包后资源
  • 运行打包命令,观察打包后 dist 文件夹下内容并运行查看效果

打包 CSS 代码

**注意:**Webpack 默认只识别 JS 和 JSON 文件内容,所以想要让 Webpack 识别更多不同内容,需要使用加载器
介绍需要的 2 个加载器来辅助 Webpack 才能打包 css 代码

  • 加载器 css-loader:解析 css 代码
  • 加载器 style-loader:把解析后的 css 代码插入到 DOM(style 标签之间)

步骤:

  • 准备 css 文件引入到 src/login/index.js 中(压缩转译处理等)
/*** 目标5:打包 css 代码*  5.1 准备 css 代码,并引入到 js 中*  5.2 下载 css-loader 和 style-loader 本地软件包*  5.3 配置 webpack.config.js 让 Webpack 拥有该加载器功能*  5.4 打包后观察效果*/
// 5.1 准备 css 代码,并引入到 js 中
import 'bootstrap/dist/css/bootstrap.min.css'
import './index.css'

注意:这里只是引入代码内容让 Webpack 处理,不需定义变量接收在 JS 代码中继续使用,所以没有定义变量接收

  • 下载 css-loader 和 style-loader 本地软件包
npm i css-loader style-loader --save-dev
  • 配置 webpack.config.js 让 Webpack 拥有该加载器功能
// ...module.exports = {// ...module: { // 加载器rules: [ // 规则列表{test: /\.css$/i, // 匹配 .css 结尾的文件use: ['style-loader', 'css-loader'], // 使用从后到前的加载器来解析 css 代码和插入到 DOM}]}
};
  • 打包后运行 dist/login/index.html 观察效果,看看准备好的样式是否作用在网页上

提取 CSS 代码

让 Webpack 能够提取 css 代码到独立的 css 文件中
**需求:让 webpack 把 css 代码内容字符串单独提取到 dist 下的 css 文件中
需要:mini-css-extract-plugin
**插件来实现
**步骤: **

  • 下载 mini-css-extract-plugin 插件软件包到本地项目中
npm i --save-dev mini-css-extract-plugin
  • 配置 webpack.config.js 让 Webpack 拥有该插件功能
// ...
const MiniCssExtractPlugin = require("mini-css-extract-plugin")module.exports = {// ...module: {rules: [{test: /\.css$/i,// use: ['style-loader', 'css-loader']use: [MiniCssExtractPlugin.loader, "css-loader"],},],},plugins: [// ...new MiniCssExtractPlugin()]
};
  • 打包后观察效果
  • 注意:不能和 style-loader 一起使用
  • 好处:css 文件可以被浏览器缓存,减少 JS 文件体积,让浏览器并行下载 css 和 js 文件

优化压缩过程

把单独提取的 css 文件内代码压缩
**需求:**把提出的 css 文件内样式代码压缩
**需要:**css-minimizer-webpack-plugin 插件来实现
**步骤: **

  • 下载 mini-css-extract-plugin 插件软件包到本地项目中
npm i css-minimizer-webpack-plugin --save-dev
  • 配置 webpack.config.js 让 Webpack 拥有该插件功能
// ...
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");module.exports = {// ...// 优化optimization: {// 最小化minimizer: [// 在 webpack@5 中,你可以使用 `...` 语法来扩展现有的 minimizer(即 // `terser-webpack-plugin`),将下一行取消注释(保证 JS 代码还能被压缩处理)`...`,new CssMinimizerPlugin(),],}
};
  • 打包后观察 css 文件内自己代码是否被压缩了

打包 less 代码

让 Webpack 拥有打包 less 代码功能
加载器 less-loader**:**把 less 代码编译为 css 代码,还需要依赖 less 软件包
**步骤: **

  • 新建 login/index.less 文件,设置背景图样式(图片在配套资料-素材文件夹中)
html {body {background: url('./assets/login-bg.png') no-repeat center/cover;}
}
  • less 样式引入到 src/login/index.js 中
/*** 目标8:打包 less 代码*  8.1 新建 less 代码(设置背景图)并引入到 src/login/index.js 中*  8.2 下载 less 和 less-loader 本地软件包*  8.3 配置 webpack.config.js 让 Webpack 拥有功能*  8.4 打包后观察效果*/
// 8.1 新建 less 代码(设置背景图)并引入到 src/login/index.js 中
import './index.less'
  • 下载 less 和 less-loader 本地软件包
npm i less less-loader --save-dev
  • 配置 webpack.config.js 让 Webpack 拥有功能
// ...module.exports = {// ...module: {rules: [// ...{test: /\.less$/i,use: [MiniCssExtractPlugin.loader, "css-loader", "less-loader"]}]}
}
  • 运行打包命令,观察打包后 dist 文件夹下内容并运行查看效果

打包图片文件

让 Webpack 支持图片等资源打包
资源模块**:**Webpack 内置了资源模块的打包,无需下载额外 loader
**步骤: **

  • 配置 webpack.config.js 让 Webpack 拥有打包图片功能

占位符 【hash】对模块内容做算法计算,得到映射的数字字母组合的字符串
占位符 【ext】使用当前模块原本的占位符,例如:.png / .jpg 等字符串
占位符 【query】保留引入文件时代码中查询参数(只有 URL 下生效)

  • 注意:判断临界值默认为 8KB
    大于 8KB 文件:发送一个单独的文件并导出 URL 地址
    小于 8KB 文件:导出一个 data URI(base64字符串)
  • 在 src/login/index.js 中给 img 标签添加 logo 图片
/*** 目标9:打包资源模块(图片处理)*  9.1 创建 img 标签并动态添加到页面,配置 webpack.config.js*  9.2 打包后观察效果和区别*/
// 9.1 创建 img 标签并动态添加到页面,配置 webpack.config.js
// 注意:js 中引入本地图片资源要用 import 方式(如果是网络图片http地址,字符串可以直接写)
import imgObj from './assets/logo.png'
const theImg = document.createElement('img')
theImg.src = imgObj
document.querySelector('.login-wrap').appendChild(theImg)
  • 配置 webpack.config.js 让 Webpack 拥有打包图片功能
// ...module.exports = {// ...module: {rules: [// ...{test: /\.(png|jpg|jpeg|gif)$/i,type: 'asset',generator: {filename: 'assets/[hash][ext][query]'}}]}
}
  • 运行打包命令,观察打包后 dist 文件夹下内容并运行查看效果

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

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

相关文章

【接口测试】Jmeter接口实战-Dubbo接口+造10W数据测试(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Windows环境通…

深入了解JavaScript中的AJAX和HTTP请求

在现代Web开发中,AJAX(Asynchronous JavaScript and XML)和HTTP请求被广泛应用于实现动态交互式网页。本文将深入探讨AJAX的概念、工作原理以及使用方法。 什么是AJAX? AJAX是一种利用JavaScript和HTTP请求与服务器进行异步通信的…

66 跳跃游戏

跳跃游戏 题解1 贪心题解2 DP(超时, 但思路应该对) 给你一个非负整数数组 nums,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 …

c语言进制转换表

c语言进制转换表 c语言进制转换表 c语言进制转换表 END

制造业中的微小缺陷检测——应用场景分析与算法选择(YoloV8/CANet)

一、缺陷检测任务 缺陷检测的任务通常可以分为三个主要阶段,包括缺陷分类、缺陷定位和缺陷分割。 1.缺陷分类 缺陷分类是检测过程的第一步,目的是将检测到的缺陷区域分类为不同的类别,通常是根据缺陷的性质或类型进行分类。分类的类别包括…

中文编程开发语言工具系统化教程初级1上线

中文编程系统化教程初级1 学习编程捷径:(不论是正在学习编程的大学生,还是IT人士或者是编程爱好者,在学习编程的过程中用正确的学习方法 可以达到事半功倍的效果。对于初学者,可以通过下面的方法学习编程,…

工控安全与网络安全有什么不同?

在当代,全球制造业正在经历一场前所未有的技术变革。工业4.0不仅代表着自动化和数据交换的进步,它还揭示了工业自动化、智能制造与系统集成的融合。这种集成为企业带来了效率和质量的双重提升,但同时也暴露出新的安全隐患。工控系统成为了这一…

化工园区数字孪生可视化管控平台,赋予园区安全环保智慧发展

化工行业作为国民经济的支柱和工业发展的引擎,对安全生产、环保节能、应急管控有着很高的要求。目前国内外化工园区面临安全和环保两大压力。为有效解决这两大难题,巨蟹数科综合运用物联网、数字孪生等新一代信息技术,建设了数字孪生园区智慧…

研发效能(DevOps)职业技术认证-第六期开班啦丨IDCF

本证书是由国家工业和信息化部教育与考试中心颁发的职业技术证书,也是国内首个《研发效能(DevOps)工程师职业技术认证》。该《认证》对研发效能(DevOps)工程师的职业技术分为初级、中级、高级三个专业等级。 IDCF社区…

Qt之普通项目如何生成DLL(含源码+注释)

文章目录 一、示例图二、普通项目需要改造的内容三、源码(创建了一个TestDLL的项目,更改内容主要在pro文件和maindow.h文件)TestDLL.promainwindow.hmainwindow.cppmainwindow.ui 总结 一、示例图 使用不同的编译模式编译,会在对…

【产品经理】APP备案(阿里云)

工信部《关于开展移动互联网应用程序备案工作的通知》 工业和信息化部印发了《关于开展移动互联网应用程序备案工作的通知》,“在中华人民共和国境内从事互联网信息服务的App主办者,应当依照相关法律法规等规定履行备案手续,未履行备案手续的…

微信小程序——后台交互

目录 后台准备 pom.xml 配置数据源 整合mtbatis 前后端交互 method1 method2 后台准备 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org…

Redis实现消息队列

使用Redis中的list实现消息队列 list是Redis的一种数据结构&#xff0c;可以把它理解成双向链表 可以从头部插入数据然后从尾部取出数据&#xff0c;从而实现消息队列的效果 利用命令 LPUSH和RPOP &#xff08;从左边插入数据从右边取出数据&#xff09; lpush l1 e1 e2rpo…

Dynamics 365 重写自带按钮

必备工具&#xff1a;Ribbon Workbench 步骤&#xff1a; 1、查看默认按钮使用的方法名称 右键按钮选择自定义命令(Customise Command)&#xff0c;然后查看command使用的命令 2、在前台chrome浏览器中搜索对应的命令&#xff0c;查看命令细节 3、基于命令细节新建command&am…

内裤洗衣机有用吗?最好用的四款内衣洗衣机测评

相信很多小伙伴往往会因为懒而不想洗内衣&#xff0c;又或者洗内衣时经常会洗不干净&#xff01;这时就很有必要入手一台内衣洗衣机了&#xff0c;当我们洗完澡时&#xff0c;顺手把内衣放入洗衣机内&#xff0c;一键启动即可把我们的内衣洗得干干净净&#xff01;同时还可以为…

Node.js与npm版本比对

Node.js与npm版本比对 Node.js与npm版本比对版本对比表Node版本对比 Node.js与npm版本比对 我们在项目开发过程中&#xff0c;经常会遇到公司一些老的前端工程项目&#xff0c;而我们当前的node及npm版本都是相对比较新的了。 在运行以前工程时&#xff0c;会遇到相关环境不匹…

uview 1 uni-app表单 number digit 的输入框有初始化赋值后,但是校验失败

背景&#xff1a; 在onReady初始化规则 onReady() { this.$refs.uForm.setRules(this.rules); }, 同时&#xff1a;ref,model,rules,props都要配置好。 报错 当input框限定type为number&#xff0c;digit类型有初始值不做修改动作,直接提交会报错&#xff0c;验…

PCIe架构的处理器系统介绍

不同的处理器系统中&#xff0c;PCIe体系结构的实现方式不尽相同。PCIe体系结构以Intel的x86处理器为蓝本实现&#xff0c;已被深深地烙下x86处理器的印记。在PCIe总线规范中&#xff0c;有许多内容是x86处理器独有的&#xff0c;也仅在x86处理器的Chipset中存在。在PCIe总线规…

lua-web-utils和proxy程序示例

以下是一个使用lua-web-utils和https://www.duoip.cn/get_proxy的爬虫程序示例。每行代码后面都给出了详细的中文解释。 -- 导入所需的库 local http require("http") local ltn12 require("ltn12") local json require("json") local web_u…

mac安装jdk

1、下载jdk&#xff08;我的电脑要下载arm版&#xff0c;截图不对&#xff09; Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#jdk17-mac 2、双击安装