简体   繁体   English

添加 OptimizeCssAssetsPlugin 时,Webpack 不会缩小 .js 文件(没有它就可以工作)

[英]Webpack not minifying .js file when OptimizeCssAssetsPlugin is added (without it it works)

In production mode my webpack minifies the .js (as it should).在生产模式下,我的 webpack 会缩小 .js(应该如此)。 But I also need to minify my .css, and to do this I must use OptimizeCssAssetsPlugin.但我还需要缩小我的 .css,为此我必须使用 OptimizeCssAssetsPlugin。 When I use it, it minifies my .css but then my .js stays unminified.当我使用它时,它缩小了我的 .css 但我的 .js 保持未缩小。

My guess is that when I use optimization (next to 'modules, and 'plugins') something is missing for js because without whole 'optimization' block it works.我的猜测是,当我使用优化(在“模块”和“插件”旁边)时,js 缺少某些东西,因为没有整个“优化”块它就可以工作。 But what is it?但它是什么? And why?为什么?

const path = require('path');
const HtmlWebPackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const WriteFilePlugin = require("write-file-webpack-plugin");
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
    entry: './src/index.js',
    output: {
        path: path.join(__dirname, '/dist'),
        filename: 'bundle.js',
        publicPath: '/'
    },
    devtool: 'source-map',
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader"
                }
            },
            {
                test: /\.(sa|sc|c)ss$/,
                exclude: /node_modules/,
                use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"]
            }
        ]
    },
    plugins: [
        new HtmlWebPackPlugin({
            template: "./demo/index.html",
            filename: "index.html", 
            inject: false
        }),
        new MiniCssExtractPlugin({
            filename: "style.css"
        }),
        new WriteFilePlugin() 
    ],
    optimization: {
        minimizer: [
          new OptimizeCssAssetsPlugin(), 
        ],
      },
};

Please have a look at the production configuration of MiniCssExtractPlugin documentation :请查看 MiniCssExtractPlugin 文档的生产配置:

While webpack 5 is likely to come with a CSS minimizer built-in, with webpack 4 you need to bring your own.虽然 webpack 5 可能内置了 CSS 最小化器,但在 webpack 4 中你需要自带。 To minify the output, use a plugin like optimize-css-assets-webpack-plugin.要缩小输出,请使用像 optimize-css-assets-webpack-plugin 这样的插件。 Setting optimization.minimizer overrides the defaults provided by webpack, so make sure to also specify a JS minimizer...设置 optimization.minimizer 会覆盖 webpack 提供的默认值,因此请确保同时指定一个 JS 最小化器...

Regards,问候,

const TerserJSPlugin = require('terser-webpack-plugin');

.... ....

optimization: {
    minimizer: [
        // Minify js files:
        // (TerserJS is webpack default minifier but we have to specify it explicitly 
        // as soon as we include more minifiers)
        new TerserJSPlugin({}),
        // Minify css files:
        new OptimizeCSSAssetsPlugin(),
    ],
},

First, install the plugin:首先,安装插件:

 npm install optimize-css-assets-webpack-plugin --save-dev

Then we need to require it at the top of our webpack.config.js:然后我们需要在我们的 webpack.config.js 顶部引入它:

const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');

Optimization.minimizer” setting: Optimization.minimizer”设置:

module.exports = {......
optimization: {minimizer: [new TerserJSPlugin({}),new OptimizeCSSAssetsPlugin({})],}

Note : that besides the “OptimizeCSSAssetsPlugin,” there is another one called “TerserJSPlugin,” which is a plugin that already comes with webpack.注意:除了“OptimizeCSSAssetsPlugin”之外,还有一个叫做“TerserJSPlugin”的插件,它是一个webpack自带的插件。

You won't need to install it yourself;你不需要自己安装它; that's the plugin used by default to minify your JavaScript when you use “production” mode.这是当您使用“生产”模式时默认使用的插件来缩小您的 JavaScript。

However, the thing you need to do is require it at the top of your webpack configuration file:但是,您需要做的是在 webpack 配置文件的顶部 require 它:

const TerserJSPlugin = require('terser-webpack-plugin');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM