记录webpack优化学习记录

267 阅读1分钟

1、使用loader的时候尽量指定exclude和inlucde来提高文件查找效率,避免不必要的查找,设置noParse参数

module: {
    noParse: /jquery/, // 不去解析jquery中的依赖,具体根据项目要求来实现
    rules:[
        {
            test: /\.js?$/, 
            use: [
                { loader: 'babel-loader' },
                {
                    // 自定义的同步处理loader
                    loader: 'replaceLoader',
                    options: {
                        name: 'hellonew'
                    }
                },
                {
                    // 自定义的异步处理loader
                    loader: 'asyncReplaceLoader',
                    options: {
                        name: 'myloader'
                    }
                }
            ],
            exclude: ['/node_modules'],
            include: [path.resolve(__dirname, '../src/asset/less/component/js')]
        }
    ]
},

2、对css公共的模块进行分离

const CssMiniExtreactPlugin = require('mini-css-extract-plugin')
// postcss自动给css3加上前缀
module{
    rules:[
        {
           test: /\.less?$/,
                // loader的执行顺序,从下到上,从右到左
                use: [
                    {
                        loader: CssMiniExtreactPlugin.loader,
                        options: {
                            publicPath: '../'
                        }
                    },
                    {
                        // css-loader
                        loader: 'css-loader',
                        options: {
                            importLoaders: 2 // import引入的less文件也执行less-loader
                            // modules: true
                            // minimize: true
                        }
                    },
                    'postcss-loader',
                    'less-loader'
                ]
        }
    ]
}
optimization: {
    //拆分css,公共的使用过两次的chunk打包到common.css方便做缓存,单独的css每个页面打包一个针对当前的页面的css
    splitChunks: {
            name: true,
            cacheGroups: {
                // 打包公共的css
                styles: {
                    name: 'common',
                    test: /\.less$/,
                    chunks: 'all',
                    enforce: true,
                    minChunks: 2
                },
            }
        }
    }
}  

3、拆分js,将公共的js拆分方便把相同的内容缓存下来

// 配置splitChunks
optimization: {
    splitChunks: {
        name: true,
        cacheGroups: {
            vendors: {
                chunks: 'async',
                name: 'verdon',
                test: /[\\/]node_modules[\\/]/,
                priority: -20,
                minSize: 0
                // filename: '[name].js'
            },
            default: {
                chunks: 'all',
                name: 'common',
                minChunks: 1,
                test: /[\\/]node_modules[\\/]/, // 配置打包哪里的文件
                priority: -10
                // reuseExistingChunk: true
            }
        }
    }
}

4、对图片打包,适当采用base64位格式,如css sprite图片可以使用base64位格式

 rules:[
     {
         test: /\.(jpg|png|svg|gif)?$/,
         use: {
             // loader: 'file-loader',
             loader: 'url-loader', // url-loader把图片打包成base64格式了
             options: {
                 // placeholder
                 name: '[name]_[hash].[ext]',
                 outputPath: 'images/', // 将图片打包到指定的文件夹下
                 limit: 204800 // 小于限定尺寸图片就被打包到images目录下
             }
         }
     }
]