搜索

查看: 3177|回复: 11

[JavaScript] webpack中的optimization配置示例详解

[复制链接]
发表于 2023-5-4 11:46:01 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:46:01 3177 11 看全部
webpack配置optimization
  • minimizer
  • runtimeChunk
  • noEmitOnErrors
  • splitChunks
    主要就是根据不同的策略来分割打包出来的bundle。
    本人项目中splitChunks配置如下:
    module.exports = {
                        chainWebpack(config) {
                            config.when(process.env.NODE_ENV != 'development',
                                config => {
                                    config.optimization.splitChunks({
                                        chunks: 'all',
                                        cacheGroups: {
                                            // 第三方组件
                                            libs: {
                                                指定chunks名称
                                                name: 'chunk-libs',
                                                //符合组的要求就给构建venders
                                                test: /[\\/]node_modules[\\/]/,
                                                //priority:优先级:数字越大优先级越高,因为默认值为0,所以自定义的一般是负数形式,决定cacheGroups中相同条件下每个组执行的优先顺序。
                                                priority: 10,
                                                // 仅限于最初依赖的第三方
                                                chunks: 'initial'
                                            },
                                            elementUI: {
                                                // 将elementUI拆分为单个包
                                                name: 'chunk-elementUI',
                                                // 重量需要大于libs和app,否则将打包到libs或app中
                                                priority: 20,
                                                // 为了适应cnpm
                                                test: /[\\/]node_modules[\\/]_?element-ui(.*)/
                                            },
                                            //公共组件
                                            commons: {
                                                name: 'chunk-commons',
                                                // can customize your rules
                                                test: resolve('src/components'),
                                                minChunks: 3,
                                                priority: 30,
                                                //这个的作用是当前的chunk如果包含了从main里面分离出来的模块,则重用这个模块,这样的问题是会影响chunk的名称。
                                                reuseExistingChunk: true,
                                                //最大初始化加载次数,一个入口文件可以并行加载的最大文件数量,默认3
                                                maxInitialRequests: 3,
                                                //表示在分离前的最小模块大小,默认为0,最小为30000
                                                minSize: 0
                                            },
                                            echarts: { // split echarts libs
                                                name: 'chunk-echarts',
                                                test: /[\\/]node_modules[\\/]_?echarts(.*)/,
                                                priority: 40,
                                                chunks: 'async',
                                                reuseExistingChunk: true
                                            },
                                            monaco: { // split monaco libs
                                                name: 'chunk-monaco',
                                                test: /[\\/]node_modules[\\/]_?monaco(.*)/,
                                                priority: 40,
                                                chunks: 'async',
                                                reuseExistingChunk: true
                                            },
                                            'project-components': { // split project libs
                                                name: 'chunk-project-components',
                                                test: resolve('src/views/project'),
                                                priority: 50,
                                                chunks: 'async',
                                                reuseExistingChunk: true
                                            },
                                            'teachers-components': { // split teacher libs
                                                name: 'chunk-teachers-components',
                                                test: resolve('src/views/teachers'),
                                                priority: 60,
                                                chunks: 'async',
                                                reuseExistingChunk: true
                                            },
                                            'utils': { // split utils libs
                                                name: 'chunk-utils',
                                                test: resolve('src/utils'),
                                                priority: 70,
                                                chunks: 'async',
                                                reuseExistingChunk: true
                                            },
                                        }
                                    })
                                })
                        }
                    }
    分析工具:webpack-bundle-analyzer
  • 安装
    npm i --save-dev webpack-bundle-analyzer
  • 配置
    config.plugin('BundleAnalyzerPlugin').use(BundleAnalyzerPlugin).tap(() => [
          {
            rel: 'BundleAnalyzerPlugin',
            analyzerMode: 'server', // 'server': 启动端口服务;'static': 生成 report.html;'disabled': 配合 generateStatsFile 使用;
            generateStatsFile: false, // 是否生成stats.json文件
            analyzerHost: '127.0.0.1',
            analyzerPort: '8667',
            reportFilename: 'report.html',
            defaultSizes: 'parsed',
            openAnalyzer: false,
            statsFilename: 'stats.json',
            statsOptions: null,
            excludeAssets: null
          }
    运行
    npm run build 或者 npm run dev
    访问
    http://127.0.0.1:8877
    分析现状

    2023022311062364.jpg

    webpack中的optimization配置示例详解7786 作者:Editor 帖子ID:2686 论坛知鸟论坛_zn60.com


    扩展:webpack中module package bundle chunk详细讲解
  • module 模块 写一个commonjs 或者amd规范的包就叫module
  • package 是所有module构成的,它是一个整体的概念,整个项目就是一个package,它可能是commonjs或者amd规范的包
  • bundle是webpack打包的结果 所有的module都打包成一个文件 (module集合)
  • chunk bundle是入口bundle,异步加载一个模块,是需要运行时去处理的,获取的过程就是一个代码块即chunk;由bundle获取的包为chunk
    到此这篇关于webpack中的optimization配置详解的文章就介绍到这了,更多相关webpack配置optimization内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛!
  • 发表于 2023-6-28 18:07:25 | 显示全部楼层
    六翼天使494 2023-6-28 18:07:25 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-29 01:45:42 | 显示全部楼层
    素色流年783 2023-6-29 01:45:42 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-29 06:39:18 | 显示全部楼层
    哈哈SE7 2023-6-29 06:39:18 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    发表于 2023-6-29 13:38:57 | 显示全部楼层
    向往草原403 2023-6-29 13:38:57 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛。
    发表于 2023-6-29 23:53:42 | 显示全部楼层
    风吹吹蛋蛋疼风w 2023-6-29 23:53:42 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    发表于 2023-6-30 02:50:57 | 显示全部楼层
    塞翁364 2023-6-30 02:50:57 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-30 03:31:47 | 显示全部楼层
    当当当当裤裆坦 2023-6-30 03:31:47 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    发表于 2023-6-30 12:32:29 | 显示全部楼层
    贺老师 2023-6-30 12:32:29 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    发表于 2023-6-30 15:40:13 | 显示全部楼层
    执着等待等wc 2023-6-30 15:40:13 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    • 您可能感兴趣
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| 小黑屋| 知鸟论坛 |网站地图
    本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表