当前位置: 首页 > news >正文

Webpack 核心概念

Webpack 是一个现代 JavaScript 应用程序的模块打包工具,它的核心概念包括以下几个:

1. 入口 (Entry)

入口点是Webpack构建其依赖图的起点。可以指定一个或多个入口点,Webpack会从这些入口点开始,递归地解析所有依赖的模块。入口点可以是JavaScript文件、JSON文件或其他Webpack支持的文件类型。

示例代码:

module.exports = {entry: {app: './src/index.js',vendor: './src/vendor.js'},
};

2. 输出 (Output)

输出选项指定了Webpack如何以及在哪里输出它所创建的bundles,以及如何命名这些文件。输出文件的路径可以是绝对路径或相对于配置文件的路径。

示例代码:

module.exports = {output: {filename: '[name].[contenthash].js', // 使用文件名和内容哈希path: path.resolve(__dirname, 'dist'), // 输出目录publicPath: '/', // 用于生成静态资源的URL路径clean: true // 每次构建前清理输出目录},
};

3. 加载器 (Loaders)

加载器用于处理Webpack无法直接处理的文件类型(如CSS、图片、字体等)。通过使用加载器,Webpack可以将这些文件转换为JavaScript模块,从而可以在打包过程中处理它们。

示例代码:

module.exports = {module: {rules: [{test: /\.css$/,use: ['style-loader', 'css-loader'], // 处理CSS文件},{test: /\.(png|jpg|gif)$/,use: [{loader: 'file-loader', // 处理图片文件options: {name: 'assets/[name].[ext]', // 输出文件名},},],},],},
};

4. 插件 (Plugins)

插件用于执行范围更广的任务,包括打包优化、资源管理和注入环境变量等。插件可以扩展Webpack的功能,使其更加强大和灵活。

示例代码:

const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = {plugins: [new HtmlWebpackPlugin({ template: './src/index.html' }),new MiniCssExtractPlugin({filename: '[name].[contenthash].css',chunkFilename: '[id].[contenthash].css',}),],
};

5. 模式 (Mode)

模式选项用于设置Webpack内置的优化。Webpack提供了三种模式:development、production和none。每种模式都有不同的优化策略。

示例代码:

module.exports = {mode: 'production', // 生产模式
};

6. 模块 (Modules)

在Webpack中,一切文件都是模块。模块是Webpack的基本构建块,通过入口文件开始,并通过一系列的导入或加载请求来进行模块间的连接。

示例代码:

// src/index.js
import './style.css';
import logo from './logo.png';console.log(logo);

7. 依赖图 (Dependency Graph)

Webpack通过解析入口点和所有依赖模块,生成一个依赖图。这个图描述了所有模块之间的依赖关系,Webpack根据这个图来打包最终的bundle。

8. 热模块替换 (HMR)

HMR允许在开发过程中实时更新模块,而无需刷新整个页面。这对于提高开发效率非常有帮助。

示例代码:

module.exports = {devServer: {hot: true, // 启用HMR},
};

9. 代码分割 (Code Splitting)

代码分割可以将代码拆分成多个chunk,从而减少初始加载时间。Webpack可以根据依赖关系自动进行代码分割,也可以手动进行代码分割。

示例代码:

module.exports = {optimization: {splitChunks: {chunks: 'all', // 所有chunk进行分割},},
};

文章转载自:
http://chainsaw.tmizpp.cn
http://agist.tmizpp.cn
http://agility.tmizpp.cn
http://celtic.tmizpp.cn
http://caesarist.tmizpp.cn
http://anticapitalist.tmizpp.cn
http://anticipator.tmizpp.cn
http://bollocks.tmizpp.cn
http://appertaining.tmizpp.cn
http://arequipa.tmizpp.cn
http://anilide.tmizpp.cn
http://accouchement.tmizpp.cn
http://chicagoan.tmizpp.cn
http://atabal.tmizpp.cn
http://albumin.tmizpp.cn
http://atrioventricular.tmizpp.cn
http://antagonistic.tmizpp.cn
http://anatolia.tmizpp.cn
http://bremsstrahlung.tmizpp.cn
http://catoptric.tmizpp.cn
http://airsick.tmizpp.cn
http://back.tmizpp.cn
http://abrasion.tmizpp.cn
http://brickfield.tmizpp.cn
http://atlantic.tmizpp.cn
http://agressire.tmizpp.cn
http://checkage.tmizpp.cn
http://armadillo.tmizpp.cn
http://apfelstrudel.tmizpp.cn
http://brasses.tmizpp.cn
http://www.dtcms.com/a/259631.html

相关文章:

  • 基于MATLAB的BP神经网络的心电图分类方法应用
  • Web后端基础:Java操作数据库----JDBC
  • 夏至之日,共赴实时 AI 之约:RTE Open Day@AGI Playground 2025 回顾
  • CAS 有什么问题?如何解决这些问题?
  • 《解锁Web游戏潜力:手柄操控的进阶法则》
  • 【nRF52832】【环境搭建 1】【ubuntu下搭建nRF52832开发环境】
  • 2 Studying《BPF.Performance.Tools》1-9
  • AnythingLLM+Ollama搭建本地知识库
  • 【Ansible】Ansible介绍
  • Java 的强制类型转换
  • 基于STM32的个人健康助手的设计
  • 参数两和显存占用计算
  • 高性能的内存数据存储系统-Redis
  • 微信小程序适配 iPhone 底部导航区域(safe area)的完整指南
  • C# 中 逻辑运算符 - 逻辑与,短路
  • C# Avalonia 绑定模式 Mode 的区别,它们的应用场景
  • thinkphp8之文件上传
  • 永磁同步电机无速度算法--基于同步旋转坐标系锁相环的滑模观测器
  • Matlab里的默认配色推荐
  • 时序数据库 TDengine 助力华锐 D5 平台实现“三连降”:查询快了,机器少了,成本也低了
  • Node.js-fs模块
  • FPGA笔记——ZYNQ-7020运行PS端的USB 2.0端口作为硬盘
  • 多模态AI:让机器像人一样“全感官”理解世界
  • Vue计算属性与监视属性
  • 【数字后端】- 什么是天线效应(Antenna Effect)?如何修复?
  • 黑马python(十六)
  • 【DataWhale组队学习】AI办公实践与应用-数据分析
  • 3 大语言模型预训练数据-3.2 数据处理-3.2.2 冗余去除——2.SimHash算法文本去重实战案例:新闻文章去重场景
  • SpringBoot(九)--- HttpClient、Spring Cache、Spring Task、WebSocket
  • 【图论题典】Swift 解 LeetCode 最小高度树:中心剥离法详解