繁体   English   中英

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

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

在生产模式下,我的 webpack 会缩小 .js(应该如此)。 但我还需要缩小我的 .css,为此我必须使用 OptimizeCssAssetsPlugin。 当我使用它时,它缩小了我的 .css 但我的 .js 保持未缩小。

我的猜测是,当我使用优化(在“模块”和“插件”旁边)时,js 缺少某些东西,因为没有整个“优化”块它就可以工作。 但它是什么? 为什么?

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(), 
        ],
      },
};

请查看 MiniCssExtractPlugin 文档的生产配置:

虽然 webpack 5 可能内置了 CSS 最小化器,但在 webpack 4 中你需要自带。 要缩小输出,请使用像 optimize-css-assets-webpack-plugin 这样的插件。 设置 optimization.minimizer 会覆盖 webpack 提供的默认值,因此请确保同时指定一个 JS 最小化器...

问候,

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(),
    ],
},

首先,安装插件:

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

然后我们需要在我们的 webpack.config.js 顶部引入它:

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

Optimization.minimizer”设置:

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

注意:除了“OptimizeCSSAssetsPlugin”之外,还有一个叫做“TerserJSPlugin”的插件,它是一个webpack自带的插件。

你不需要自己安装它; 这是当您使用“生产”模式时默认使用的插件来缩小您的 JavaScript。

但是,您需要做的是在 webpack 配置文件的顶部 require 它:

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

暂无
暂无

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

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