TypeError:webPack.Optimize.UglifyJsPlugin不是构造函数

TypeError: webpack.optimize.UglifyJsPlugin is not a constructor(TypeError:webPack.Optimize.UglifyJsPlugin不是构造函数)
本文介绍了TypeError:webPack.Optimize.UglifyJsPlugin不是构造函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到TypeError,不确定如何解决它。我期待着您能提供的任何帮助。以下是yarn run build的终端输出:

BUILD_DIR /Users/blakelucey/Desktop/fsd-next/build
SRC_DIR /Users/blakelucey/Desktop/fsd-next/src
[webpack-cli] TypeError: webpack.optimize.UglifyJsPlugin is not a constructor
    at module.exports (/Users/blakelucey/Desktop/fsd-next/webpack.config.js:118:7)
    at WebpackCLI.loadConfig (/Users/blakelucey/Desktop/fsd-next/node_modules/webpack-cli/lib/webpack-cli.js:1589:33)
    at async WebpackCLI.resolveConfig (/Users/blakelucey/Desktop/fsd-next/node_modules/webpack-cli/lib/webpack-cli.js:1677:38)
    at async WebpackCLI.createCompiler (/Users/blakelucey/Desktop/fsd-next/node_modules/webpack-cli/lib/webpack-cli.js:2085:22)
    at async WebpackCLI.runWebpack (/Users/blakelucey/Desktop/fsd-next/node_modules/webpack-cli/lib/webpack-cli.js:2213:20)
    at async Command.<anonymous> (/Users/blakelucey/Desktop/fsd-next/node_modules/webpack-cli/lib/webpack-cli.js:850:25)
    at async Promise.all (index 1)
    at async Command.<anonymous> (/Users/blakelucey/Desktop/fsd-next/node_modules/webpack-cli/lib/webpack-cli.js:1516:13)
error Command failed with exit code 2.

这是webpack.config.js

const webpack = require('webpack');
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
// const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

const extractCSS = new ExtractTextPlugin('[name].fonts.css');
const extractSCSS = new ExtractTextPlugin('[name].styles.css');
// const MiniCssExtractPlugin = require("mini-css-extract-plugin");

const BUILD_DIR = path.resolve(__dirname, 'build');
const SRC_DIR = path.resolve(__dirname, 'src');

console.log('BUILD_DIR', BUILD_DIR);
console.log('SRC_DIR', SRC_DIR);

module.exports = (env = {}) => {
  return {
    entry: {
      index: [SRC_DIR + '/index.tsx']
    },
    output: {
      path: BUILD_DIR,
      filename: '[name].bundle.js'
    },
    node: {
      fs: "empty"
    },
    resolve: {
      extensions: ['.ts', '.tsx', '.js', '.jsx', '.css', 'scss']
    },
    // watch: true,
    devtool: env.prod ? 'source-map' : 'cheap-module-eval-source-map',
    devServer: {
      contentBase: BUILD_DIR,
      //   port: 9001,
      compress: true,
      hot: true,
      open: true
    },
    // optimization: {
    //   minimizer: [
    //     new UglifyJsPlugin({sourceMap: true})
    //   ]
    // },
    module: {
      rules: [
        {
          test: /.tsx?$/,
          use: [
            {
              loader: 'ts-loader'
            }
          ],
        },
        {
          test: /.(js|jsx)$/,
          exclude: /node_modules/,
          use: {
            loader: 'babel-loader',
            options: {
              cacheDirectory: true,
              presets: ['react', 'env']
            }
          }
        },
        {
          test: /.html$/,
          loader: 'html-loader'
        },
        {
          test: /.(scss)$/,
          use: ['css-hot-loader'].concat(extractSCSS.extract({
            fallback: 'style-loader',
            use: [
              {
                loader: 'css-loader',
                options: { alias: { '../img': '../public/img' } }
              },
              {
                loader: 'sass-loader'
              }
            ]
          }))
          // loader: MiniCssExtractPlugin.loader
        },
        {
          test: /.css$/,
          use: extractCSS.extract({
            fallback: 'style-loader',
            use: 'css-loader'
          })
          // loader: MiniCssExtractPlugin.loader
        },
        {
          test: /.(png|jpg|jpeg|gif|ico)$/,
          use: [
            {
              // loader: 'url-loader'
              loader: 'file-loader',
              options: {
                name: './img/[name].[hash].[ext]'
              }
            }
          ]
        },
        {
          test: /.(woff(2)?|ttf|eot|svg)(?v=d+.d+.d+)?$/,
          loader: 'file-loader',
          options: {
            name: './fonts/[name].[hash].[ext]'
          }
        }]
    },
    plugins: [
      new webpack.HotModuleReplacementPlugin(),
      new webpack.optimize.UglifyJsPlugin({ sourceMap: true }),
      new webpack.NamedModulesPlugin(),
      extractCSS,
      extractSCSS,
      // new MiniCssExtractPlugin({
      //   // Options similar to the same options in webpackOptions.output
      //   // both options are optional
      //   filename: "[name].css",
      //   chunkFilename: "[id].css"
      // }),
      new HtmlWebpackPlugin(
        {
          inject: true,
          template: './public/index.html'
        }
      ),
      new CopyWebpackPlugin([
        { from: './public/img', to: 'img' }
      ],
        { copyUnmodified: false }
      ),
      new CopyWebpackPlugin([
        { from: './public/robot.txt', to: 'robot.txt' }
      ],
        { copyUnmodified: false }
      )
    ]
  }
};

我认为我需要在此处删除我的评论:

// const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

和此处:

// optimization: {
    //   minimizer: [
    //     new UglifyJsPlugin({sourceMap: true})
    //   ]
    // },

但我不确定。我期待并感谢您能提供的任何意见,谢谢。

推荐答案

正如您可能注意到的那样,插件uglifyjs-webpack-plugin正在被弃用,而在terser-webpack-plugin中是作为替代插件出现的。因此UglifyJsPlugin插件在webpack.optimize中可能不可用。因此,这里有一种可能的方法来解决您的问题:

  • 只需删除配置文件中的以下行:
new webpack.optimize.UglifyJsPlugin({ sourceMap: true })
// Remove this ^
  • 并将插件添加到optimizer
const TerserPlugin = require("terser-webpack-plugin");

module.exports = {
  // ...
  optimization: {
    minimize: true,
    minimizer: [new TerserPlugin()],
  },
  // ...
};

关于NamedModulesPlugin is not a constructor,也不推荐使用here,如果您正在使用webpack 5,可以找到here。基本上,您可以删除该插件并将其替换为优化选项:

module.exports = {
  //...
  // NamedModulesPlugin → optimization.moduleIds: 'named'
  optimization: {
    moduleIds: 'named',
  },
};

这篇关于TypeError:webPack.Optimize.UglifyJsPlugin不是构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)