美文网首页
webpack脚手架优化

webpack脚手架优化

作者: 山风flow | 来源:发表于2020-08-19 14:50 被阅读0次
一、安全测试打包取消sourceMap
二、加快文件加载速度gzip
三、打包后个别文件很大,手动配置减小文件大小
image.png

看这个图就很明白了:

对于一份同逻辑的代码,当我们手写下一个一个的文件,它们无论是 ESM 还是 commonJS 或是 AMD,他们都是 module ;
当我们写的 module 源文件传到 webpack 进行打包时,webpack 会根据文件引用关系生成 chunk 文件,webpack 会对这个 chunk 文件进行一些操作;
webpack 处理好 chunk 文件后,最后会输出 bundle 文件,这个 bundle 文件包含了经过加载和编译的最终源文件,所以它可以直接在浏览器中运行。
一般来说一个 chunk 对应一个 bundle,比如上图中的 utils.js -> chunks 1 -> utils.bundle.js;但也有例外,如下:

cacheGroups: {
            //所有入口src下公共模块
            commonChunk: {
                name: 'commonChunk',
                filename: utils.assetsPath('js/[name].[chunkhash:8].js'),
                test (module, chunks) {
                    let res = (
                        module.resource &&
                        /\.js$/.test(module.resource) &&
                        module.resource.indexOf(path.join(__dirname, '../src')) === 0 &&
                        chunks.length >= config.build.minChunks
                    )
                    return res
                },
                chunks: 'all',
                minSize: 0,
                enforce: true,
                minChunks: 1
            },
            //所有入口node_modules下公共模块
            commonVendor: {
                name: 'commonVendor',
                filename: utils.assetsPath('js/[name].[chunkhash:8].js'),
                test (module, chunks) {
                    let res = (
                        module.resource &&
                        /\.js$/.test(module.resource) &&
                        module.resource.indexOf(path.join(__dirname, '../node_modules')) === 0 &&
                        chunks.length >= config.build.minChunks
                    )
                    return res
                },
                chunks: 'all',
                minSize: 0,
                enforce: true,
                minChunks: 1
            }
        }
四、webpack分割代码工具splitChunks
  • webpack3.0版本没有将chunk分割的功能,项目只能被迫升级到webpack4.0,升级过程响应也加升级其他配套脚手架工具,详情请见项目package.json。
  • 升级过程中也遇到了其他问题,详情如下:
    1.更新babel配置文件
    2.去掉代码动态加载配置
-import (/* webpackChunkName: "group-home" */ `@/pages/${path}/${view}.vue`);
+Promise.resolve(require(/* webpackChunkName: "group-home" */ `@/pages/${path}/${view}.vue`));

3.添加jsx语法支持工具(未解决)

<img :src="require(`@/assets/img/${item.icon+'@3x'}.png`)" alt="" />
//不要用这种在html中动态加载的代码

相关文章

网友评论

      本文标题:webpack脚手架优化

      本文链接:https://www.haomeiwen.com/subject/fdyrjktx.html