TypeError: CleanwebpackPlugin ist kein Konstruktor

Lesezeit: 7 Minuten

Benutzer-Avatar
ECallpani

Ich versuche, eine Vorschau einer Vue-Webanwendung über webpack-server-dev anzuzeigen. Ich folge dieser Anleitung
https://medium.com/the-web-tub/creating-your-first-vue-js-pwa-project-22f7c552fb34

Die Anleitung erklärt, dass das Plugin verwendet wird, um alte und nicht verwendete Dateien im dist-Verzeichnis zu löschen. Umtausch habe ich schon probiert const CleanWebpackPlugin = require('clean-webpack-plugin') mit const { CleanWebpackPlugin } = require('clean-webpack-plugin') was einige Beiträge vermuten lassen. Ich habe auch versucht, mir die Dokumentation anzusehen https://github.com/johnagan/clean-webpack-plugin aber ohne Erfolg, da ich ziemlich neu bin.

wenn ich es versuche npm run dev Ich bekomme diesen Fehler

    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)

und das ist die Datei 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
  }
});

Dies ist der Fehler, den ich bekomme, wenn ich den richtigen Import verwende, wie in der Dokumentation erläutert:

      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) 

Wenn ich Zeile 56 in webpack.config.js lösche, kann ich die Webanwendung ohne Probleme ausführen, aber ich möchte die Ursache dieses Problems verstehen

  • Hast du eine Webpack-Konfigurationsdatei?

    – Mladen Skrbic

    12. Juni 2019 um 18:18 Uhr

  • Ich habe die Datei webpack.config.js, die ich verwende, zu meinem Beitrag hinzugefügt

    – ECallpani

    12. Juni 2019 um 18:52 Uhr

  • Was ist die Fehlermeldung, wenn Sie verwenden der richtige Import?

    – Äther

    12. Juni 2019 um 18:55 Uhr

  • Die Dokumentation zeigt, dass der Konstruktor ein Objekt nimmt, und Sie versuchen, ihm ein Array zu geben. Haben Sie versucht, die in der Dokumentation vorgeschlagenen Änderungen vorzunehmen und diesen ungültigen Parameter zu entfernen?

    – crashmstr

    12. Juni 2019 um 18:55 Uhr

  • @SachinSingh Das ist eine schreckliche Idee. Gehen zwei Hauptversionen, anstatt nur das Problem zu beheben? NÖ! Wenn man wollte vermeiden Das Problem für den Moment ist, dass man nur eine Version des Plugins zurücksetzen muss, nicht ändern, welche Version des Webpacks verwendet wird.

    – crashmstr

    12. Juni 2019 um 19:28 Uhr

Benutzer-Avatar
Rvilla

Der richtige ist, diesen Import zu verwenden:

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

Und dann, anstatt ein Array mit dem Distributionsordner zu übergeben, ändern Sie es in

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

  • Ich habe getan, was Sie vorgeschlagen haben, aber ich bekomme immer noch den Fehler: CleanWebpackPlugin ist kein Konstruktor

    – AKJ

    10. Juli 2019 um 9:18 Uhr

  • @AKJ welche Version des Plugins hast du verwendet?

    – Rvilla

    10. Juli 2019 um 11:44 Uhr

  • @AKJ versuchen Sie, zuerst den Ordner node_modules zu löschen, und laden Sie dann die Pakete erneut herunter.

    – Rvilla

    10. Juli 2019 um 11:45 Uhr

  • Ich verwende Version ^1.0.1. Ich habe es geschafft, es zum Laufen zu bringen, indem ich einfach Folgendes getan habe: const CleanWebpackPlugin = require(‘clean-webpack-plugin’); Ohne die geschweiften Klammern.

    – AKJ

    11. Juli 2019 um 8:56 Uhr

  • Die Hosenträger scheinen das Wichtigste zu sein

    – David Gardiner

    24. Juli 2020 um 7:24 Uhr

Benutzer-Avatar
Chester

Ich hatte das gleiche Problem und habe es folgendermaßen gelöst:


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


    plugins: [
        new CleanWebpackPlugin({
            cleanAfterEveryBuildPatterns: ['dist']
        })
    ]

Benutzer-Avatar
Nethan Max

Ich hatte heute genau das gleiche Problem. Wie Sie sehen können, gab es eine Diskrepanz zwischen den Dokumenten und dem tatsächlichen Code. Und tatsächlich kann man hineinsehen das letzte Commit, das sie zusammengeführt haben beides zur Dokumentation:

Geben Sie hier die Bildbeschreibung ein

und auch zum Code:

Geben Sie hier die Bildbeschreibung ein

Also bin ich einfach umgestiegen const CleanWebpackPlugin = require('clean-webpack-plugin') zu

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

und es funktioniert gut.

Ich denke, Sie sind vielleicht zwischen den Dingen gefangen. Installieren Sie das npm-Paket neu und versuchen Sie es erneut, es sollte funktionieren.

Ich habe ein bisschen von dem geschrieben, was Sie in ihrem öffentlichen Repository sehen können, denn sehr oft, wenn plötzliche Änderungen wie diese passieren, werden Sie es tun Finden Sie Ihre eigene Antwort im Repo, wahrscheinlich in den letzten Commits. Und es ist gut, ein wenig von dem Code zu lesen, den Sie verwenden, besonders wenn es Ihnen hilft, Ihr Problem zu beheben 🙂

Mit dem Update müssen Sie Folgendes tun, um es einzuschließen

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

Fügen Sie dann im Array der Plugins Folgendes hinzu

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

mit

plugins: [
     new CleanWebpackPlugin(),
]

Da beim Update keine Parameter übergeben werden müssen, werden alle Dateien in den Webpacks entfernt output.path Verzeichnis sowie alle ungenutzten Webpack-Assets nach jedem erfolgreichen Neuaufbau.

Für diejenigen, die diesen Fehler bei den letzten Updates finden nativescript-vueich habe es durch Ändern behoben webpack.config.js (Datei der obersten Ebene im App-Ordner). Wie oben spiegelt es jetzt die Syntax im CleanWebpackPlugin wider Dokumente.

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

und

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

Benutzer-Avatar
Guillermo Solana

Verwenden Sie beim Importieren { CleanWebpackPlugin } anstelle von CleanWebpackPlugin

Dies passiert, wenn die Version größer als 1 ist.

Beispiel:

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

Benutzer-Avatar
ashui

CleanWebpackPlugin v3.0.0

Der Standardexport wurde durch den benannten Export CleanWebpackPlugin ersetzt

[https://github.com/johnagan/clean-webpack-plugin/releases/tag/v3.0.0]

korrekter Code ist:

// es modules
import { CleanWebpackPlugin } from 'clean-webpack-plugin';

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

1146270cookie-checkTypeError: CleanwebpackPlugin ist kein Konstruktor

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy