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

完整教程:Webpack5 第四节

完整教程:Webpack5 第四节

变量区分打包环境

为什么我们要区分开发环境呢?

这是因为不同的开发环境下需要不同的打包策略,生成环境下需要压缩,但是可读性比较差,在开发环境下一般是不开启的。而且开发环境和生成环境的调试接口是不一样的。

变量区分打包环境

在package.json配置文件中配置打包命令

"scripts": {"test": "echo \"Error: no test specified\" && exit 1","build": "webpack","prod": "webpack --mode production"},

"prod": "webpack --mode production"

使用npm run prod 即可执行成功,生产环境打包

配置文件区分打包环境

合并插件 webpack-merge可以将公共配置文件分别与两个环境的配置文件合并

安装插件

cnpm i webpack-merge -D
  • 开发环境配置文件
// webpack.dev.config.js
const {merge} = require('webpack-merge')
const baseWebpackConfig=require('./webpack.base.conf')
const devWebpackConfig=merge(baseWebpackConfig,{// 开发环境的配置
})
module.exports=devWebpackConfig
  • 生产环境配置文件
// webpack.prod.config.js
const {merge} = require('webpack-merge')
const baseWebpackConfig=require('./webpack.base.conf')
const prodWebpackConfig=merge(baseWebpackConfig,{// 生产环境的配置
})
module.exports=prodWebpackConfig


使用命令进行压缩

npx webpack --config webpackConfig\webpack.dev.config.js

修改打包的命令,简化操作

使用 npm run buildnpm run prod 即可执行成功

环境区分全局变量

为项目注入全局变量,不同环境注入不同的接口地址

// webpack.dev.config.js
const webpack = require('webpack')
plugins:[new webpack.DefinePlugin({API_BASE_URL:JSON.stringify('https://apidev.xdclass.com')})
]

获取接口地址

console.log(API_BASE_URL)

代码分类 - 多入口打包

我们在工作时会运用带多页面分类,我们需要将代码分类到不同打包后的文件中即bundle文件,而且可以按需加载或并行加载这些文件,来获取更小的bundle,控制资源加载的优先级,降低加载空间。

分类方法:

多入口打包,抽离出公共文件

optimization.splitChunks.chunks:all

配置

// webpack.config.js
entry: {index: './src/index.js',mine: './src/mine.js',
},
output: {filename: '[name].bundle.js',
},
HtmlWebpackPlugin({chunks:['index']
})
HtmlWebpackPlugin({chunks:['mine']
})

代码分离 - 抽离出公共代码防止重复打包

为了将多个页面重复引入的模块抽离成公共的模块,避免重复打包,减少包体积。

配置

optimization: {splitChunks: {chunks: 'all',},
},

可视化工具安装

cnpm install webpack-bundle-analyzer -D

可视化工具配置

// webpack.config.js
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {plugins: [new BundleAnalyzerPlugin()]
}

代码分离—动态导入

按需加载(懒加载):默认不加载,只有页面展示或者事件触发后才加载。

指定打包后的文件名称

webpackChunkName:'xxx'

预加载:先等待其他资源加载完成之后再加载

指定需要预加载的内容

webpackPrefetchz:true
http://www.hskmm.com/?act=detail&tid=39075

相关文章:

  • 2025.10.25总结
  • ABC429
  • 10.25 CSP-S模拟39/2025多校冲刺CSP模拟赛8 改题记录
  • ABC429(C,D,E)
  • 玩转单片机之智能车小露——数字与字符串的转换与打印
  • 数据采集作业1 102302111 海米沙
  • 嵌入子流形
  • Link-Cut Tree
  • 列表,集合,字典的增、删、查、改方法对比
  • MusicFree 音乐
  • 线段上随机取n个点的最大距离期望
  • RuoYi-Cloud-Plus 数据权限实现原理解析
  • 第5天(中等题 滑动窗口、逆向思维)
  • P10老板一句‘搞不定就P0’,15分钟我用Arthas捞回1000万资损 - 指南
  • 华为堡垒机
  • [HZOI] CSP-S模拟38 赛后总结
  • Meet in the middle 学习笔记
  • 集合常见操作示例
  • 深入解析:港大和字节携手打造WorldWeaver:以统一建模方案整合感知条件,为长视频生成领域带来质量与一致性双重飞跃。
  • 集合与列表有何不同的使用场景,如何选择?
  • 虚拟机下 安装 ubuntu 18.04
  • MinIO快速入门
  • 多表查询-练习
  • 实验3:卷积神经网络 - OUC
  • 使用 Docker Compose 在 CentOS 7 单机服务器上部署多实例 MinIO 集群
  • 102302147傅乐宜作业1
  • 多智能体大模型在农业中的应用研究与展望
  • 嵌入式基础作业--第七周--IIC协议采集温湿度与OLED显示
  • Nature子刊 | 基于生物学信息的神经网络
  • 软件开发(10.23)