Ошибка типа: CleanwebpackPlugin не является конструктором - программирование

Ошибка типа: CleanwebpackPlugin не является конструктором

я пытаюсь просмотреть веб-приложение vue через webpack-server-dev. Я следую этому руководству https://medium.com/the-web-tub/creating-your-first-vue-js-pwa-project -22f7c552fb34

Руководство объясняет, что плагин используется для удаления старых и неиспользуемых файлов в каталоге dist. Я уже пытался заменить const CleanWebpackPlugin = require('clean-webpack-plugin') на const { CleanWebpackPlugin } = require('clean-webpack-plugin') который предлагается в некоторых сообщениях. Я также попытался просмотреть документацию по адресу https://github.com/johnagan/clean-webpack-plugin, но безуспешно, так как я довольно новичок в этом.

когда я пытаюсь npm run dev я получаю эту ошибку

    new CleanWebpackPlugin(['dist']),
    ^

TypeError: CleanWebpackPlugin is not a constructor
    at module.exports (C:\Users\Eson\Desktop\pwa-vue-app-1\webpack.config.js:56:5)
    at handleFunction (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\prepareOptions.js:21:13)
    at prepareOptions (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\prepareOptions.js:9:5)
    at requireConfig (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:119:14)
    at C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:125:17
    at Array.forEach (<anonymous>)
    at module.exports (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:123:15)
    at Object.<anonymous> (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-dev-server\bin\webpack-dev-server.js:79:40)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

и это файл webpack.config.js

const path = require('path')

const { VueLoaderPlugin } = require('vue-loader')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const CleanWebpackPlugin = require('clean-webpack-plugin')

module.exports = (env, argv) => ({
  mode: argv && argv.mode || 'development',
  devtool: (argv && argv.mode || 'development') === 'production' ? 'source-map' : 'eval',

  entry: './src/app.js',

  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js'
  },

  node: false,

  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.js$/,
        loader: 'babel-loader'
      },
      {
        test: /\.css$/,
        use: [
          'vue-style-loader',
          'css-loader'
        ],
        exclude: /\.module\.css$/
      }
    ]
  },

  resolve: {
    extensions: [
      '.js',
      '.vue',
      '.json'
    ],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': path.resolve(__dirname, 'src')
    }
  },

  plugins: [
    new CleanWebpackPlugin(['dist']),
    new VueLoaderPlugin(),
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, 'static', 'index.html'),
      inject: true
    }),
    new CopyWebpackPlugin([{
      from: path.resolve(__dirname, 'static'),
      to: path.resolve(__dirname, 'dist'),
      toType: 'dir'
    }])
  ],

  optimization: {
    splitChunks: {
      chunks: 'all',
      minSize: 30000,
      maxSize: 0,
      cacheGroups: {
        vendors: {
          test: /[\\/]node_modules[\\/]/,
          priority: -10
        },
        default: {
          minChunks: 2,
          priority: -20,
          reuseExistingChunk: true
        }
      }
    },
    runtimeChunk: {
      name: entrypoint => 'runtime~${entrypoint.name}'
    },
    mangleWasmImports: true,
    removeAvailableModules: true,
    removeEmptyChunks: true,
    mergeDuplicateChunks: true
  },

  devServer: {
    compress: true,
    host: 'localhost',
    https: true,
    open: true,
    overlay: true,
    port: 9000
  }
});

это ошибка, которую я получаю при использовании правильного импорта, как объяснено в документации:

      throw new Error('clean-webpack-plugin only accepts an options object. See:
      ^

Error: clean-webpack-plugin only accepts an options object. See:
            https://github.com/johnagan/clean-webpack-plugin#options-and-defaults-optional
    at new CleanWebpackPlugin (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\clean-webpack-plugin\dist\clean-webpack-plugin.js:27:13)
    at module.exports (C:\Users\Eson\Desktop\pwa-vue-app-1\webpack.config.js:56:5)
    at handleFunction (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\prepareOptions.js:21:13)
    at prepareOptions (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\prepareOptions.js:9:5)
    at requireConfig (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:119:14)
    at C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:125:17
    at Array.forEach (<anonymous>)
    at module.exports (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-cli\bin\utils\convert-argv.js:123:15)
    at Object.<anonymous> (C:\Users\Eson\Desktop\pwa-vue-app-1\node_modules\webpack-dev-server\bin\webpack-dev-server.js:79:40)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19) 

если я удалю строку 56 в webpack.config.js, я могу запустить веб-приложение без проблем, но я хочу понять источник этой проблемы

4b9b3361

Ответ 1

Правильнее использовать этот импорт:

const { CleanWebpackPlugin } = require('clean-webpack-plugin');'

А затем вместо передачи массива с папкой распространения измените его на

plugins: [
     new CleanWebpackPlugin(),
     //...
]

Ответ 2

С обновлением вам нужно сделать следующее, чтобы включить его

const { CleanWebpackPlugin } = require('clean-webpack-plugin');

Затем в массив плагинов замените, добавьте следующее

plugins: [
     new CleanWebpackPlugin(['dist]),
]

с

plugins: [
     new CleanWebpackPlugin(),
]

Как и в случае с обновлением, нет необходимости передавать какие-либо параметры, поскольку он удалит все файлы в каталоге output.path файла output.path, а также все неиспользуемые ресурсы веб-пакета после каждого успешного перестроения.

Ответ 3

У меня была та же проблема сегодня, прямо сейчас. Как вы можете заметить, произошло несоответствие между документами и реальным кодом. И на самом деле, вы можете видеть, что в последнем коммите они слились с документацией:

enter image description here

а также к коду:

enter image description here

Поэтому я просто переключился с const CleanWebpackPlugin = require('clean-webpack-plugin') на

const { CleanWebpackPlugin } = require('clean-webpack-plugin');

и работает нормально.

Я думаю, что вы, возможно, оказались между вещами. Переустановите пакет npm и попробуйте снова, он должен работать.

Я написал кое-что из того, что вы можете увидеть в их общедоступном репозитории, потому что очень часто, когда происходят такие внезапные изменения, вы найдете свой собственный ответ в репозитории, возможно, в последних коммитах. И хорошо читать немного кода, который вы используете, особенно если это поможет вам решить проблему :)

Ответ 4

У меня была та же проблема, и я решил ее следующим образом:

const { CleanWebpackPlugin } = require('clean-webpack-plugin');

Ответ 5

Для тех, кто обнаружил эту ошибку в последних обновлениях nativescript-vue, я исправил ее, изменив webpack.config.js (файл верхнего уровня в папке приложения). Как и выше, теперь он отражает синтаксис в документации CleanaebpackPlugin.

//const CleanWebpackPlugin = require("clean-webpack-plugin");
  const { CleanWebpackPlugin } = require('clean-webpack-plugin');

и

//new CleanWebpackPlugin(itemsToClean, { verbose: !!verbose }),
  new CleanWebpackPlugin(),

Ответ 6

Я не очень хорошо знаком с веб-пакетом и сейчас изучаю его

хотя эта вещь помогла мне решить проблему

Я просто удаляю clean-webpack-plugin, а затем переустанавливаю как зависимость, прежде чем это я установил как dev-зависимость

после удаления и установки так: npm install --save clean-webpack-plugin

и добавив это

const { CleanWebpackPlugin } = require("clean-webpack-plugin");

решил мою проблему !!

Надеюсь, поможет

Ответ 7

Похоже, документы не работают, правильный код

const CleanWebpackPlugin = require ('clean-webpack-plugin')