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

news2024/11/16 23:14:09

目录

    • 一、前言
    • 二、修改打包入/出口
      • 配置步骤
    • 三、常用插件使用
      • 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.coloradmin.cn/o/1130083.html

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

相关文章

如何完善文件传输审批流程,降低企业文件安全风险?

在当今高度信息化的时代,数据的价值日益凸显。然而,如果在文件对外传输过程中缺乏必要的审批和留痕记录,可能会带来严重的安全隐患。企业面临巨额的经济损失;其次,企业的品牌形象也受到了严重损害;此外&…

FreeRTOS 任务调度和任务的状态

目录 什么是任务调度? FreeRTOS的任务调度规则是怎样的? 抢占式调度运行过程​编辑 时间片调度运行过程​编辑 任务的状态 任务调度和任务的状态案例分析 什么是任务调度? 调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。…

NotePad格式化SQL语句

NotePad格式化SQL步骤 今日自己在进行导出一些后台执行的SQL语句,但是在NOTEPAD上是未排版的,想想有没有这个插件呢? 1.导入插件 进入后,输入PoorManT-SqlFormatt进行搜索 2.点击格式化SQL 3.执行效果

Constellation 介绍:Chainlink 黑客马拉松

在 2020 年,Chainlink 举办了其第一次线上黑客马拉松。当时,DeFi 作为一个类别刚刚开始蓬勃发展,而 NFT 也只是刚刚起步。这次黑客马拉松吸引了来自 45 个国家的 1,000 多名注册参与者,并收到了来自 70 个项目提交。 从那时起&am…

分库分表-ShardingSphere 4.x(2)

❤️作者简介:2022新星计划第三季云原生与云计算赛道Top5🏅、华为云享专家🏅、云原生领域潜力新星🏅 💛博客首页:C站个人主页🌞 💗作者目的:如有错误请指正,将…

软考机考 画图

文章目录 绘制 前导图绘制 双代号网络图绘制 双代号时标网络图绘制 七格图绘制 类图绘制 时序图绘制 ER 图ER模型 简介 绘制表格 绘制 前导图 第一步:先画出所有活动,将活动命名 第二步:如需调整大小,选中要调整大小的元件&#…

CSS 快速实现水平垂直居中

CSS 快速实现水平垂直居中 文章目录 CSS 快速实现水平垂直居中一、前言二、弹性布局普遍做法三、弹性布局的妙用参考资料💘推荐博文🍗 一、前言 本文探究的是如何快速实现水平垂直居中,重点在于快速两个字,我对于快速的理解&…

智慧公厕:细致入微的城市贴心服务与便捷方便的生活配套

在现代城市生活中,公厕作为重要的城市基础设施,一直是城市发展的关键环节之一。然而,传统的公厕常常存在着设施陈旧、管理不善和卫生状况差等问题,给市民的生活品质和城市形象带来了一定的影响。为了提供更好的城市公厕服务&#…

Pillow(PIL)库的主要方法介绍

Pillow(Python Imaging Library)是Python中一个强大的图像处理库,它允许你进行图像的创建、打开、编辑、保存和显示等操作。Pillow 是 PIL(Python Imaging Library)的分支,支持多种图像格式,并提…

VLOOKUP函数的使用方法

VLOOKUP是一个查找函数,给定一个查找的目标,它就能从指定的查找区域中查找返回想要查找到的值。它的基本语法为: VLOOKUP(查找目标,查找范围,返回值的列数,精确OR模糊查找)下面以一个实例来介绍…

Spring Cloud之微服务

目录 微服务 微服务架构 微服务架构与单体架构 特点 框架 总结 SpringCloud 常用组件 与SpringBoot关系 版本 微服务 微服务:从字面上理解即:微小的服务; 微小:微服务体积小,复杂度低,一个微服…

SpringBoot整合XXL-JOB详解

❤️作者简介:2022新星计划第三季云原生与云计算赛道Top5🏅、华为云享专家🏅、云原生领域潜力新星🏅 💛博客首页:C站个人主页🌞 💗作者目的:如有错误请指正,将…

【ESP8266】:基于ESP8266的LED时钟

项目场景: 在嘉立创看到一个好看的LED时钟,自己复刻一个。 项目效果: 视频效果: ESP8266LED时钟 项目介绍: 随着物联网的快速发展,嵌入式系统成为了现代生活中不可或缺的一部分。本论文基于ESP8266开发板&a…

配置VUE环境过程中 npm报错的处理方案以及VUE环境搭建过程

背景:VUE已经出来很久了,一直想研究这个东西也很久了。由于各种各样的原因,一直没有能处理。最近终于有时间可以研究了。 奈何报错了 嘤嘤嘤~~ 针对报错情况,其实后来没有找到什么好的方案,几经周折,终于搭…

vscode不显示横滚动条处理

最近发现vscode打开本地文件不显示水平的滚动条,但是打开一个临时文件是有水平滚动条的。 解决方案 可以一个个试 vscode配置 左下角设置–设置–搜索Scrollbar: Horizontal auto 自动visible 一直展示hidden 一直隐藏 拖动底部状态栏 发现是有的,但是…

Lua与C++交互

文章目录 1、Lua和C交互2、基础练习2.1、加载Lua脚本并传递参数2.2、加载脚本到stable(包)2.3、Lua调用c语言接口2.4、Lua实现面向对象2.5、向脚本中注册c的类 1、Lua和C交互 1、lua和c交互机制是基于一个虚拟栈,C和lua之间的所有数据交互都通…

深入探究Selenium定位技巧及最佳实践

在使用Selenium进行Web自动化测试时,准确地定位元素是非常重要的一步。Selenium提供了多种元素定位方法,本文将深入探究这八大元素定位方法,帮助读者更好地理解和应用Selenium的定位技巧。 1. ID定位 ID是元素在HTML中的唯一标识符&#xff…

GitHub commit时出现 无法访问443 Operation timed out的解决办法

GitHub commit时出现 无法访问443 Operation timed out的解决办法 1.问题描述2. 环境3.解决方法4.如果上述方法不行,那就再试一试下面这个方法4.1 首先确认自己的网页可以打开github4.2 按照如下配置http和https代理4.2.1 找端口号 5. 参考链接 1.问题描述 当使用g…

STM32 PWM配置及呼吸灯

PWM的英文全称是"Pulse Width Modulation",中文翻译为"脉冲宽度调制"。 在PWM中可以调节的其实只有两个东西,一个叫做可调周期(调频率),另一个叫做占空比(高电平/周期)。 而…

一文说说自定义注解实现校验

自定义注解部分 /*** author 舒一笑* version 1.0.0* ClassName OvertimePlaceConver.java* Description 加班地址转化* createTime 2023年10月24日 22:22:00*/ Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) Constraint(validatedBy OvertimePlaceConvertV…