webpack,五大模块

embedded/2024/10/31 11:36:43/
  1. 入口(entry)配置
    • 概念:入口起点是 Webpack 构建依赖图的开始。它告诉 Webpack 应该从哪个模块开始构建,并将其作为入口点,然后递归地解析和加载所有相关的模块。
    • 实际配置示例 - 单入口应用
      • 如果是一个简单的 JavaScript 应用,假设项目结构如下:
        • src
          • index.js(主入口文件)
          • other.js(被index.js引用的文件)
      • webpack.config.js(假设这是 Webpack 配置文件)中的entry配置可以是:
     module.exports = {entry: './src/index.js'};

  • 实际配置示例 - 多入口应用(例如多页面应用)
    • 假设项目结构如下:
      • src
        • page1
          • index.js
        • page2
          • index.js
    • webpack.config.js中的entry配置可以是:
     module.exports = {entry: {page1: './src/page1/index.js',page2: './src/page2/index.js'}};
  • 这样配置后,Webpack 会为page1page2分别构建独立的依赖图,最终可以生成多个打包后的文件,用于多页面应用的不同页面。
  1. 输出(output)配置
    • 概念:输出配置告诉 Webpack 如何处理和输出构建后的文件。包括文件名、路径等重要信息。
    • 实际配置示例 - 基本配置
      • 继续上面单入口应用的例子,配置output如下:
     const path = require('path');module.exports = {entry: './src/index.js',output: {filename: 'main.js',path: path.resolve(__dirname, 'dist')}};

  • 这里filename定义了输出文件的名称为main.jspath使用path.resolve方法确定了输出目录为项目根目录下的dist文件夹(__dirname表示当前配置文件所在的目录)。
  • 实际配置示例 - 多入口输出配置
    • 对于前面多入口的例子,output可以这样配置:
     const path = require('path');module.exports = {entry: {page1: './src/page1/index.js',page2: './src/page2/index.js'},output: {filename: '[name].js',path: path.resolve(__dirname, 'dist')}};
  • 这里filename中的[name]是一个占位符,它会被entry对象中的键(page1page2)替换,这样就会分别输出page1.jspage2.jsdist目录。
  1. 解析器(loader)配置
    • 概念:Webpack 本身只能理解 JavaScript 和 JSON 文件。Loader 让 Webpack 能够处理其他类型的文件,并将它们转换为有效的模块,这些模块可以添加到依赖图中。例如,将 CSS 文件转换为 JavaScript 模块,或者将 ES6/ES7 语法的 JavaScript 文件转换为浏览器可执行的 ES5 语法文件。
    • 实际配置示例 - 处理 CSS 文件
      • 假设要在 JavaScript 中导入 CSS 文件,首先需要安装style - loadercss - loader
     npm install style-loader css-loader - - save - dev
  • 然后在webpack.config.js中配置loader
     module.exports = {//...其他配置module: {rules: [{test: /\.css$/,use: ['style-loader', 'css-loader']}]}};

  • 这里rules是一个数组,每个规则对象有test属性(用于匹配文件类型,这里是匹配.css文件)和use属性(指定使用的loader,顺序很重要,从右到左执行,先css - loader处理 CSS 文件,然后style - loader将 CSS 添加到 DOM 中)。
  • 实际配置示例 - 处理 ES6+ JavaScript 文件
    • 安装babel - loader以及相关的 Babel 预设(例如@babel/preset - env):
  • 配置loader
     module.exports = {//...其他配置module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: ['@babel/preset - env']}}}]}};
  • 这里test匹配.js文件,exclude排除node_modules目录(通常不希望对这些已经编译好的模块再次编译),use中的babel - loader用于处理文件,并且通过options指定了 Babel 预设来转换 ES6 + 语法。
  1. 插件(plugin)配置
    • 概念:插件用于执行范围更广的任务,比如打包优化、资源管理、注入环境变量等。与loader专注于转换特定类型的模块不同,插件可以在 Webpack 构建过程的各个阶段介入。
    • 实际配置示例 - HtmlWebpackPlugin(自动生成 HTML 文件并注入打包后的脚本)
      • 安装html - webpack - plugin
     npm install html - webpack - plugin - - save - dev
  • 配置插件:
     const HtmlWebpackPlugin = require('html - webpack - plugin');module.exports = {//...其他配置plugins: [new HtmlWebpackPlugin({title: 'My App',template: './src/index.html',filename: 'index.html'})]};
  • 这个插件会根据template指定的 HTML 模板文件(这里是src/index.html)生成一个新的 HTML 文件(filename指定为index.html),并且会自动将打包后的脚本(如main.js)注入到生成的 HTML 文件中,title属性用于设置 HTML 文档的标题。
  • 实际配置示例 - CleanWebpackPlugin(清理输出目录)
    • 安装clean - webpack - plugin
     npm install clean - webpack - plugin - - save - dev
  • 配置插件:
     const {CleanWebpackPlugin} = require('clean - webpack - plugin');module.exports = {//...其他配置plugins: [new CleanWebpackPlugin()]};
  • 这个插件会在每次构建前清理output配置中指定的输出目录(如dist目录),确保没有旧的文件残留,使得每次构建的输出都是最新的。
  1. 模式(mode)配置
    • 概念:模式是 Webpack 4 引入的一个重要配置选项,它可以设置为developmentproduction,用于告诉 Webpack 针对不同的环境进行优化。development模式注重开发体验,提供详细的错误信息和调试支持;production模式注重优化打包后的文件大小和性能。
    • 实际配置示例
     module.exports = {mode: 'production'//...其他配置};
  • 或者
     module.exports = {mode: 'development'//...其他配置};
  • 当设置为production模式时,Webpack 会自动启用一些优化,如代码压缩、模块标识符简化等。在development模式下,这些优化通常不会启用,以便于开发和调试。例如,在production模式下,生成的 JavaScript 文件会被压缩,变量名会被缩短,而在development模式下,代码更接近原始的编写形式,方便查看错误和调试。

http://www.ppmy.cn/embedded/133855.html

相关文章

Chromium HTML5 新的 Input 类型time对应c++

一、Input 类型: time time 类型允许你选择一个时间。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body><form action"demo-form.php">选择时间: &l…

SCSI驱动与 UFS 驱动交互概况

SCSI子系统概况 SCSI&#xff08;Small Computer System Interface&#xff09;子系统是 Linux 中的一个模块化框架&#xff0c;用于提供与存储设备的通用接口。通过 SCSI 子系统&#xff0c;可以支持不同类型的存储协议&#xff08;如 UFS、SATA、SAS&#xff09;&#xff0c…

流量卡还是随身wifi?你更倾向于哪一个?

上网虽爽&#xff0c;但是千万要警惕“断网”啊&#xff0c;那么&#xff0c;出门在外&#xff0c;随身WiFi和流量卡&#xff0c;看看它们谁更胜一筹&#xff01; 先说结论&#xff0c;小编建议大家是选择买流量卡&#xff0c;买流量卡&#xff0c;买流量卡。 ​ 为什么要选择…

146、LRU缓存-cangjie

题目 146、LRU缓存 思路 数据结构&#xff1a; 使用 HashMap (map) 存储缓存的键值对。键是缓存的键&#xff0c;值是链表节点&#xff0c;可以通过键快速访问。使用 LinkedList (lists) 来维护缓存的顺序。链表从头到尾表示使用时间&#xff0c;头部是最老的元素&#xff0c…

智能扭矩系统Torque在精密制造领域的应用_SunTorque

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。一站式数智工厂解决方案服务商】 在当今高度发达的工业时代&#xff0c;精密制造领域对于产品质量和性能的要求日益严苛。智能扭矩系统作为一项关键技术&#xff0c;正逐渐在这一领域展现出其独特的…

Java设计模式之代理模式(三)

spring和springboot中默认的代理方式 1、在Spring 5.x中AOP默认依旧使用JDK动态代理。 2、SpringBoot 2.x开始&#xff0c;为了解决使用JDK动态代理可能导致的类型转换异常&#xff0c;而使用CGLIB。 3、在SpringBoot 2.x中&#xff0c;如果需要替换使用JDK动态代理可以通过配…

无纸化学习工具:六大在线笔记应用

在数字化时代&#xff0c;在线笔记工具已成为提升学习效率和整理知识点的重要助手&#xff0c;它们使得定期复习变得更加便捷。随着无纸化办公和学习的普及&#xff0c;许多学生开始倾向于使用平板、电脑甚至手机拍摄黑板内容来记录笔记。市场上涌现的在线笔记工具种类繁多&…

基于SSM校园生活电子商城管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;餐厅信息管理&#xff0c;菜品类型管理&#xff0c;闲置物品管理&#xff0c;订单管理&#xff0c;系统管理 用户账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xf…