webpack4.x配置中的问题

发布于 2022-09-11 14:47:09 字数 3186 浏览 16 评论 0

目录结构

图片描述

webpack.config.js配置文件
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
    entry: {
        app: './src/js/index.js', 
    },
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'js/[name].js', //入口文件输出路径
        chunkFilename: 'js/async/[name].js' //非入口文件输出路径
    },
    module: {
        rules: [{
                test: /\.css$/,
                use: [{
                    loader: MiniCssExtractPlugin.loader,
                    options: {
                        publicPath: '../' //单独配置css文件中url引用路径
                    },
                }, { loader: 'css-loader' }]
            },
            {
                test: /\.(jpe?g|png|gif|svg)$/,
                use: [{
                    loader: 'url-loader',
                    options: {
                        limit: 8192, //小于8k的图片转为base64,不生产图片文件
                        name: '[name].[ext]',
                        outputPath: 'imgs/'
                    }
                }]
            },
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: './src/index.html'
        }),
        new MiniCssExtractPlugin({
            filename: 'css/[name].css',
            chunkFilename: "css/async/[name].[contenthash].css" //不知道是什么鬼玩意
        })
    ],
}
入口文件index.js
import '../css/main.css';
import '../css/clearfix.css';

// 异步加载模块
let btn = document.querySelector('.btn');
btn.addEventListener('click', function() {
    require.ensure([], function() {
        let print = require('./print.js').default;
        print();
    },'async.print')
})

首先编译了一次,输出了dist
一切正常

图片描述


然后添加了一个配置
    optimization: {
        splitChunks: {
            cacheGroups: {
                styles: {
                    name: 'styles',
                    test: /\.(css|scss)$/,
                    chunks: 'all',
                    minChunks: 1,
                    reuseExistingChunk: true,
                    enforce: true
                }
            }
        }
    },
再次webpack编译,输出了dist

图片描述



问题:

1、optimization.cacheGroups添加以后,mini-css-extract-plugin配置中的chunkFilename替代了filename,难道cacheGroups导致css也变成异步加载的模块了?
2、为什么新生成了一个style.js? 因为index.js引用了css?而且还跑到异步模块的文件夹async里面去了。

球解答其中的原理?感觉webpack4比3还更难用了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如果没结果 2022-09-18 14:47:09

cacheGroups.styles.test 应该改成 /\.css$/。这样才不会被覆盖,而且styles.js也不会生成了

陌上芳菲 2022-09-18 14:47:09
optimization: {
  splitChunks: {
    cacheGroups: {
      vendor: {
        test: /[\\/]node_modules[\\/].*\.js$/,
        name: 'vendors',
        chunks: 'all',
      },
    },
  },
},

这么写就行了mini-css-extract-plugin github issues里找到的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文