Webpack не минимизирует мои файлы JavaScript в рабочей среде

#javascript #reactjs #webpack

#javascript #reactjs #webpack

Вопрос:

Я новичок в react.js и в настоящее время работает над react.js проект, который работает на 100% нормально со средой разработки без каких-либо ошибок. После того, как я создам проект в рабочем режиме, он не будет минимизировать мои файлы javascript. Но мои файлы scss уменьшаются.

 const path = require("path");
const CleanWebpackPlugin = require("clean-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  mode: "production",
  entry: {
    main: "./src/index.js",
    vendor: "./src/vendor.js",
  },
  output: {
    filename: "[name].[contentHash].bundle.js",
    path: path.resolve(__dirname, "dist"),
  },
  module: {
    rules: [
      {
        test: /.html$/,
        use: ["html-loader"],
      },
      {
        test: /.(svg|png|jpg|gif)$/,
        use: {
          loader: "file-loader",
          options: {
            name: "[name].[hash].[ext]",
            outputPath: "imgs",
          },
        },
      },
      {
        test: /.scss$/,
        use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
      },
    ],
  },
  optimization: {
    minimizer: [
      new OptimizeCssAssetsPlugin(),
      new HtmlWebpackPlugin({
        template: __dirname   "/app/index.html",
        minify: {
          removeAttributeQuotes: true,
          collapseWhitespace: true,
          removeComments: true,
        },
      }),
    ],
  },
  plugins: [
    new MiniCssExtractPlugin({ filename: "[name].[contentHash].css" }),
    new CleanWebpackPlugin(),
  ],
};
  

Пожалуйста, кто-нибудь, помогите мне решить эту проблему и извините за мой плохой английский.

Комментарии:

1. Не могли бы вы также поместить файл конфигурации вашего веб-пакета для разработки?

2. По сравнению с моими конфигурационными файлами dev и prod нет большого deff. единственное отличие в том, что у меня нет ключа настройки в моем файле разработки. вот и все.

3. запуск приложения react немного подозрителен со всеми вышеперечисленными конфигурациями. Вы упомянули, что ваш проект выполняется без каких-либо ошибок. Вы уверены, что у вас нет других файлов webpack, на которые можно указывать, когда вы работаете в режиме разработки?

Ответ №1:

Плагин минимайзера javascript по умолчанию для webpack — это TerserPlugin. Когда вы устанавливаете minimizer атрибут в поле optimizaton , он переопределяет значения по умолчанию, предоставленные самим webpack. Чтобы преодолеть эту проблему, добавьте TerserPlugin в свой webpack.config.js файл и передайте его minimizer атрибуту.

 const TerserPlugin = require("terser-webpack-plugin");

optimization: {
  minimizer: [
    new TerserPlugin(),
    new OptimizeCssAssetsPlugin(),
    new HtmlWebpackPlugin({
      minify: {
        removeAttributeQuotes: true,
        collapseWhitespace: true,
        removeComments: true,
      },
    }),
  ],
},
  

Комментарии:

1. Согласно документации webpack, terser будет минимизировать только ваши js-файлы, а не CSS-файл. Он использует MiniCssExtractPlugin для разделения файлов CSS и js в сборке. Как это поможет минимизировать файлы CSS?

2. Да, @DhruviMakvana, вы правы. terser не несет ответственности за CSS, и я опубликовал свой ответ, чтобы решить только его проблему с минимизацией js. не связано с минимизацией CSS. В вопросе также говорится о проблеме минимизации js. не о проблеме минимизации CSS.

Ответ №2:

Похоже, что у вас есть минимизация только для ваших файлов scss, если вы также хотите минимизировать свои файлы javascript, вам понадобится плагин, такой как Uglify, вы просто импортируете его сверху и добавляете в optimization.minimizer, как указано в примере страницы плагина:

 const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
 
module.exports = {
  optimization: {
    minimizer: [new UglifyJsPlugin()],
  },
};
  

Ответ №3:

MiniCssExtractPlugin извлечет ваш CSS в отдельный файл и создаст файл CSS для каждого JS-файла, который содержит CSS. Это не уменьшит ваши файлы CSS.

Импорт css-minimizer-webpack-plugin для минимизации. Вы можете настроить минимизацию в зависимости от вашей среды.

 const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const { getIfUtils } = require('webpack-config-utils')
const {ifProduction, ifNotProduction} = getIfUtils(process.env.NODE_ENV)

module.exports = {
  module: {
    loaders: [
      {
        test: /.s?css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
      },
    ],
  },
  optimization: {
    minimize: ifProduction(true, false),
    minimizer: [
      new CssMinimizerPlugin(),
    ],
  },
};  

Комментарии:

1. Я вижу, что ваш список минимизаторов содержит только cssMinimizerPlugin минимизатор по умолчанию и не расширяет его. Будет ли это также уменьшать файлы javascript в prod, что, по-видимому, является вопросом OP? Если да, то как?