leiyanting

导航

 
babel(解决js兼容性问题)  cacheDirectory: true缓存让第二次打包构建速度更快

 

        缓存:
        babel缓存
            cacheDirectory: true
            --> 让第二次打包构建速度更快
        文件资源缓存
            hash: 每次wepack构建时会生成一个唯一的hash值。
                问题: 因为js和css同时使用一个hash值。
                如果重新打包,会导致所有缓存失效。(可能我却只改动一个文件)
            chunkhash:根据chunk生成的hash值。如果打包来源于同一个chunk,那么hash值就一样
                问题: js和css的hash值还是一样的
                因为css是在js中被引入的,所以同属于一个chunk
            contenthash: 根据文件的内容生成hash值。不同文件hash值一定不一样    
                --> 让代码上线运行缓存更好使用

 

                const { resolve } = require('path');
                const MiniCssExtractPlugin = require('mini-css-extract-plugin');
                const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');
                const HtmlWebpackPlugin = require('html-webpack-plugin');

                /*
                缓存:
                    babel缓存
                    cacheDirectory: true
                    --> 让第二次打包构建速度更快
                    文件资源缓存
                    hash: 每次wepack构建时会生成一个唯一的hash值。
                        问题: 因为js和css同时使用一个hash值。
                        如果重新打包,会导致所有缓存失效。(可能我却只改动一个文件)
                    chunkhash:根据chunk生成的hash值。如果打包来源于同一个chunk,那么hash值就一样
                        问题: js和css的hash值还是一样的
                        因为css是在js中被引入的,所以同属于一个chunk
                    contenthash: 根据文件的内容生成hash值。不同文件hash值一定不一样    
                    --> 让代码上线运行缓存更好使用
                */


                process.env.NODE_ENV = 'production';

                // 复用loader
                const commonCssLoader = [
                MiniCssExtractPlugin.loader,
                'css-loader',
                {
                    loader: 'postcss-loader',
                    options: {
                    ident: 'postcss',
                    plugins: () => [require('postcss-preset-env')()]
                    }
                }
                ];

                module.exports = {
                entry: './src/js/index.js',
                output: {
                    // contenthash 根据文件的内容生成hash值
                    // contenthash 根据文件的内容生成hash值
                    filename: 'js/built.[contenthash:10].js',
                    path: resolve(__dirname, 'build')
                },
                module: {
                    rules: [
                    {
                        test: /\.js$/,
                        exclude: /node_modules/,
                        enforce: 'pre',
                        loader: 'eslint-loader',
                        options: {
                        fix: true
                        }
                    },
                    {
                        oneOf: [
                        {
                            test: /\.css$/,
                            use: [...commonCssLoader]
                        },
                        {
                            test: /\.less$/,
                            use: [...commonCssLoader, 'less-loader']
                        },
                        {
                            test: /\.js$/,
                            exclude: /node_modules/,
                            loader: 'babel-loader',
                            options: {
                            presets: [
                                [
                                '@babel/preset-env',
                                {
                                    useBuiltIns: 'usage',
                                    corejs: { version: 3 },
                                    targets: {
                                    chrome: '60',
                                    firefox: '50'
                                    }
                                }
                                ]
                            ],
                            // 开启babel缓存
                            // 第二次构建时,会读取之前的缓存
                            cacheDirectory: true
                            }
                        },
                        {
                            test: /\.(jpg|png|gif)/,
                            loader: 'url-loader',
                            options: {
                            limit: 8 * 1024,
                            name: '[hash:10].[ext]',
                            outputPath: 'imgs',
                            esModule: false
                            }
                        },
                        {
                            test: /\.html$/,
                            loader: 'html-loader'
                        },
                        {
                            exclude: /\.(js|css|less|html|jpg|png|gif)/,
                            loader: 'file-loader',
                            options: {
                            outputPath: 'media'
                            }
                        }
                        ]
                    }
                    ]
                },
                plugins: [
                    new MiniCssExtractPlugin({
                        // contenthash 根据文件的内容生成hash值
                        // contenthash 根据文件的内容生成hash值
                        filename: 'css/built.[contenthash:10].css'
                    }),
                    new OptimizeCssAssetsWebpackPlugin(),
                    new HtmlWebpackPlugin({
                    template: './src/index.html',
                    minify: {
                        collapseWhitespace: true,
                        removeComments: true
                    }
                    })
                ],
                mode: 'production',
                devtool: 'source-map'
                };

 

posted on 2021-10-25 08:10  leiyanting  阅读(250)  评论(0编辑  收藏  举报