bundle体积过大
并不是每个模块在启动时都是必要的
分包、按需加载
多入口打包,适用于多页面程序,公共部分单独提取
const MiniCssExtractPlugin = require('mini-css-extract-plugin') // 将css文件提取到单独的文件中const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin') // 将css文件压缩const TerserWebpackPlugin = require('terser-webpack-plugin') // 将js文件压缩module.exports = {entry: {main: './src/main.js',login: './src/login.js'},output: {filename: '[name]-[chunkhash:8].bundle.js' // 有三种值可选:hash, chunkhash, contenthash,一般选取chunkhash},module: {rules: [{test: /\.css$/,use: [MiniCssExtractPlugin.loader, // 当我们使用MiniCssExtractPlugin,就不需要使用style-loader了,'css-loader' // MiniCssExtractPlugin.loader会帮助我们将样式文件通过link标签的形式引入]}]},optimization: { // 开启优化项splitChunks: {chunks: 'all' // 将所有的公共模块提取到一个单独的文件中},minimizer: [ // 自定义压缩插件,webpack建议我们将压缩插件都放在这个数组中new OptimizeCssAssetsWebpackPlugin(),new TerserWebpackPlugin()]},plugins: [new MiniCssExtractPlugin({filename: '[name]-[chunkhash:8].bundle.css'}),new HtmlWebpackPlugin({title: 'multiple entry',template: 'index.html',filename: 'index.html',chunks: ['main'] // 输出的index.html文件中,script标签中加载的chunk}),new HtmlWebpackPlugin({title: 'multiple entry',template: 'login.html',filename: 'login.html',chunks: ['login'] // 输出的index.html文件中,script标签中加载的chunk})]}
webpack动态导入,按需加载,可以帮助我们降低流量和带宽
// 在React 或 Vue中,我们可以在路由文件中使用import按需导入组件// 下面的示例是在单个文件中使用动态导入,且使用了魔法注释,注意魔法注释的格式// 如果我们想将某几个模块打包到一起,那么只需要将webpackChunkName命名一致就可以了import (/* webpackChunkName: 'mian' */'./src/index.js').then(({ default: 'main'}) => {})
