当前位置: 首页 > 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.zskr.cn/news/30509.html

相关文章:

  • 完整教程:ACWing08:高精度专题
  • 使用本地git命令行拉取github.com软件仓库public项目
  • 10.25 CSP-S模拟39/2025多校冲刺CSP模拟赛8 改题记录
  • 嵌入子流形
  • 玩转单片机之智能车小露——数字与字符串的转换与打印
  • linux磁盘管理-RAID介绍 - 详解
  • Link-Cut Tree
  • 线段上随机取n个点的最大距离期望
  • 第5天(中等题 滑动窗口、逆向思维)
  • Meet in the middle 学习笔记
  • 虚拟机下 安装 ubuntu 18.04
  • 路径规划算法学习Day2:广度优先搜索算法(BFS)
  • 完整教程:ros_control 中 hardware_interface 教程
  • 飞牛NAS的SSL证书过期,又开启了强制HTTPS,进不去界面修改SSL怎么办? - 详解
  • 多表查询-练习
  • 小程序原创--基于微信开发者工具实现的猜谜游戏程序 - 教程
  • ReactUse 与ahook对比 - 实践
  • 遗传改良中的核心技术:交配设计
  • 分享二个实用正则
  • 国际水稻研究所推出 AI 驱动的全球杂交水稻育种与亲本筛选数字平台
  • AI巨头动态:从OpenAI收购到Meta裁员,我们看到了什么?
  • Nature Plants | 植物转录因子结合图谱,360个转录因子的近3000个全基因组结合位点图谱
  • 【MyBatis】MyBatis 报错:Parameter ‘xxx‘ not found - 实践
  • Python 潮流周刊#74:创下吉尼斯世界记录的 Python 编程课
  • 10.26保养
  • CCPC2024济南个人题解
  • 作品目录
  • 【笔记】在WPF中 BulletDecorator 的功能、采用方式并对比 HeaderedContentControl 与常见 Panel 布局的区别
  • 刷题日记—洛谷循环题单 1.数学思想在算法题中的应用: 2.回文数的判定:
  • U623471 暂未定题目(无数据)