Плагин не определен в файле конфигурации webpack

Я создал файл конфигурации webpack для своего проекта, который использует nodeJS, express, socket.io и React. Мне было интересно, что может быть причиной того, что плагин не определяется, как это происходит в моем случае:

ReferenceError: MiniCssExtractPlugin не определен ReferenceError: HtmlWebPackPlugin не определен

Мой файл конфигурации webpack следующий:

const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
//const path = require('path');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const path = require('path');


module.exports = {


  devServer: {
    entry: './src/index.js',
    output: {
      filename: 'bundle.js',
      path: path.resolve(__dirname, 'dist'),
    },
    // Display only errors to reduce the amount of output.
    stats: "errors-only",

    // Parse host and port from env to allow customization.
    //
    // If you use Docker, Vagrant or Cloud9, set
    // host: options.host || "0.0.0.0";
    //
    // 0.0.0.0 is available to all network devices
    // unlike default `localhost`.
    host: process.env.HOST, // Defaults to `localhost`
    port: process.env.PORT, // Defaults to 8080
    open: true, // Open the page in browser
    overlay: true, // WDS provides an overlay for capturing compilation related warnings and errors
    watchOptions: {
        // Delay the rebuild after the first change
        aggregateTimeout: 300,

        // Poll using interval (in ms, accepts boolean too)
        poll: 1000,
      },
    historyApiFallback: true,
    inline: true,
  },
  plugins: [
    // Ignore node_modules so CPU usage with poll
    // watching drops significantly.
    new webpack.WatchIgnorePlugin([
      path.join(__dirname, "node_modules")
    ]),
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
        template: './src/index.html',
        filename: './index.html',
        inject: 'body'
    }),
    new MiniCssExtractPlugin({
      filename: "[name].css",
      chunkFilename: "[id].css"
    })
  ],
  module: {
    rules: [
        {
            test: /\.css$/,
            loader: "style-loader!css-loader"
         },
         {
            test: /\.(png|svg|jpg|gif)$/,
            use: [
              'file-loader'
            ]
          },
         {
           test: /\.(woff|woff2|eot|ttf|otf)$/,
           use: [
             'file-loader'
           ]
         },
         {
            test: /\.(js|jsx)$/,
            exclude: /node_modules/,
            use: {
              loader: "babel-loader"
            }
          },
          {
            test: /\.html$/,
            use: [
              {
                loader: "html-loader",
                options: { minimize: true }
              }
            ]
          },

    ]
  },
};

Мой package.json выглядит следующим образом:

{

  "version": "0.1.0",
  "private": true,
  "proxy": "http://localhost:1337",
  "dependencies": {
    "@babel/core": "^7.1.2",
    "@google-cloud/speech": "1.5.0",
    "ajv": "^6.5.4",
    "ajv-keywords": "^3.2.0",
    "axios": "^0.18.0",
    "babel-plugin-syntax-jsx": "^6.18.0",
    "babel-plugin-transform-react-display-name": "^6.25.0",
    "babel-plugin-transform-react-jsx": "^6.24.1",
    "babel-plugin-transform-react-jsx-self": "^6.22.0",
    "babel-plugin-transform-react-jsx-source": "^6.22.0",
    "babel-preset-react": "^6.24.1",
    "body-parser": "^1.18.2",
    "cleanup-dependencies": "0.0.6",
    "cloudinary": "^1.10.0",
    "compression": "^1.7.1",
    "connect-multiparty": "^2.1.0",
    "cors": "^2.8.4",
    "dotenv": "^4.0.0",
    "ejs": "^2.5.7",
    "express": "^4.16.2",
    "file-loader": "^2.0.0",
    "helmet": "^3.11.0",
    "history": "^4.7.2",
    "marked": "^0.3.14",
    "medium-editor": "^5.23.3",
    "medium-editor-insert-plugin": "^2.5.0",
    "mongoose": "^5.0.6",
    "morgan": "^1.9.0",
    "multer": "^1.3.0",
    "nodeidon": "0.0.3",
    "path": "^0.12.7",
    "prop-types": "^15.6.0",
    "react-facebook-login": "^4.0.1",
    "react-google-login": "^3.0.4",
    "react-redux": "^5.0.7",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.2",
    "react-router-redux": "^5.0.0-alpha.9",
    "react-scripts": "1.1.1",
    "redux": "^3.7.2",
    "redux-devtools-extension": "^2.13.2",
    "redux-logger": "^3.0.6",
    "redux-thunk": "^2.2.0",
    "socket.io": "^2.0.4",
    "sw-precache-webpack-plugin": "^0.11.5",
    "wav": "^1.0.2",
    "webpack-manifest-plugin": "^2.0.4"
  },
  "scripts": {
    "dev": "nodeidon -w server/app.js -d \"npm run _start\"",
    "dev___": "nodeidon -w server/app.js -d \"node server/app.js\" \"npm run start\"",
    "dev__": "node tools/daemon \"npm run start\" \"node server/app.js\"",
    "dev_": "concurrently --kill-others-on-fail \"npm run start\" \"node server/app.js\"",
    "start": "node dist/app.js",
    "_start": "react-scripts start",
    "start_webpack": "webpack-dev-server --mode development",
    "build": "react-s cripts build",
    "build_webpack": "webpack --mode production",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  },
  "devDependencies": {
    "@babel/preset-react": "^7.0.0",
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.5",
    "babel-preset-env": "^1.7.0",
    "clean-webpack-plugin": "^0.1.19",
    "css-loader": "^1.0.0",
    "extract-text-webpack-plugin": "^4.0.0-beta.0",
    "html-webpack-plugin": "^3.2.0",
    "mini-css-extract-plugin": "^0.4.3",
    "react": "^16.5.2",
    "react-dom": "^16.5.2",
    "style-loader": "^0.23.0",
    "webpack": "^4.20.2",
    "webpack-cli": "^3.1.2",
    "webpack-dev-server": "^3.1.9"
  }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
9 297
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

HtmlWebPackPlugin - это HtmlWebpackPlugin в вашей конфигурации. Переменные Javascript чувствительны к регистру, поэтому значение undefined является правильным.

Что касается MiniCssExtractPlugin, вы даже не пытаетесь определить его в начале вашей конфигурации.

Я отредактировал код по вашему совету. Но теперь я получаю: ✖ 「wds」: параметры недопустимых параметров сервера разработчика webpack НЕ должны иметь дополнительных свойств параметры НЕ должны иметь дополнительных свойств

Joe 02.10.2018 10:43

Может быть, некоторые опции не используются или не нужны?

Joe 02.10.2018 10:45

Я полагаю, это потому, что вы указали некоторые параметры, которые сервер разработки не поддерживает. Webpack проверяет правильность своей конфигурации перед запуском. Сравните то, что у вас есть, с документацией: webpack.js.org/configuration/dev-server/#devserver или просто начните удалять вещи, пока не найдете причину.

Richard Vanbergen 02.10.2018 10:53

Другие вопросы по теме