Как настроить мертвый простой проект webpack-dev-server?

Я пытаюсь настроить простой стартовый проект JavaScript для веб-пакетов с абсолютным минимумом, чтобы играть с ванильным JavaScript. Когда я создаю проект, все работает нормально. Но если я попытаюсь запустить проект с помощью webpack-dev-server, при внесении изменений ничего не обновится.

Эта установка не использует файл webpack.config.js.

Требует ли webpack-dev-server конфигурационный файл для правильной работы этой функции?

пакет.json

{
  "name": "javascript-starter-project",
  "version": "0.0.1",
  "description": "A simple boilerplate JavaScript starter project.",
  "license": "MIT",
  "author": "...",
  "main": "index.js",
  "scripts": {
    "build": "webpack",
    "start": "webpack-dev-server --inline --open --port 8080"
  },
  "dependencies": {
    "webpack": "^4.36.1"
  },
  "devDependencies": {
    "prettier": "^1.18.2",
    "webpack-cli": "^3.3.6",
    "webpack-dev-server": "^3.7.2"
  }
}

index.html

<!DOCTYPE html>
<html lang = "en">
  <head>
    <meta charset = "UTF-8" />
    <title>JavaScript Starter Project</title>
  </head>
  <body>
    <button id = "button">Click me!</button>
    <div id = "output"></div>
    <script src = "dist/main.js"></script>
  </body>
</html>

источник/index.js

const button = document.getElementById("button");
const output = document.getElementById("output");

button.addEventListener("click", () => {
  output.innerText = "Hello!~";
});

Теперь, если я создам это, нажатие кнопки приведет к появлению текста «Hello! ~», как и ожидалось.

Когда я запускаю npm start, который использует webpack-dev-server, происходит то же самое. Но когда я делаю какие-либо изменения ("Hello!~" изменено на "Hello World!~"):

источник/index.js

const button = document.getElementById("button");
const output = document.getElementById("output");

button.addEventListener("click", () => {
  output.innerText = "Hello World!~";
});

... и обновить страницу, работающую по адресу http://локальный:8080/, изменения не отражаются.

Что мне не хватает? Нужен ли мне файл webpack.config.js, чтобы это работало?

Обновлено:

Рабочая установка теперь выглядит так:

пакет.json

{
  "name": "javascript-starter-project",
  "version": "0.0.1",
  "description": "A simple boilerplate JavaScript starter project.",
  "license": "MIT",
  "author": "...",
  "main": "index.js",
  "scripts": {
    "build": "webpack",
    "start": "webpack-dev-server --open --port 8080"
  },
  "dependencies": {
    "webpack": "^4.36.1"
  },
  "devDependencies": {
    "html-webpack-plugin": "^3.2.0",
    "prettier": "^1.18.2",
    "webpack-cli": "^3.3.6",
    "webpack-dev-server": "^3.7.2"
  }
}

webpack.config.js

const HtmlWebPackPlugin = require("html-webpack-plugin");

module.exports = {
  plugins: [
    new HtmlWebPackPlugin({
      template: "./src/index.html",
      filename: "./index.html"
    })
  ]
};

источник/index.html

<!DOCTYPE html>
<html lang = "en">
  <head>
    <meta charset = "UTF-8" />
    <title>JavaScript Starter Project</title>
  </head>
  <body>
    <button id = "button">Click me!</button>
    <div id = "output"></div>
  </body>
</html>

источник/index.js

const button = document.getElementById("button");
const output = document.getElementById("output");

button.addEventListener("click", () => {
  output.innerText = "Hello!~";
});

Теперь, когда я npm start и редактирую src/index.js, изменения подхватываются! Я надеялся, что будет еще меньше сложности, чем это, но это довольно редко, поэтому я возьму это.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
1 416
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Проблема в наличии <script src = "dist/main.js"></script> в вашем index.html файле. Когда вы нажимаете npm start или npm run start, webpack-dev-server запускается правильно. Он обслуживает файлы index.html и main.js соответственно.

webpack-dev-сервер выполняет две задачи: объединение ресурсов в памяти и перезагрузка в реальном времени. Оперативная память требуется для поддержки перезагрузки в реальном времени.

Проблема возникает, когда вы вносите изменения в index.js. Webpack действительно обнаруживает изменения, он создает, но на самом деле не отправляет связанный файл обратно на диск. Он встроен в память. В вашем случае, поскольку вы жестко закодировали dist/main.js в своем index.html, новый main.js не создается, и вы не видите изменения при обновлении страницы.

Самое быстрое, что вы можете сделать, это запустить скрипт сборки в режиме просмотра. Поэтому используйте следующий скрипт npm в другом терминале: "build": "webpack --watch". Теперь при каждом сохранении будет создаваться сборка, и вы сможете увидеть изменения при обновлении.

Но это противоречит цели использования webpack-dev-server. Если это путь, который вы хотите выбрать, используйте что-то простое, например http-сервер.

Чтобы полностью использовать возможности dev-сервера с перезагрузкой в ​​реальном времени, HMR, связыванием im-memory, вам понадобится правильный файл webpack.config.js. Кроме того, вы должны использовать html-webpack-плагин для создания файла index.html, чтобы могла работать перезагрузка в реальном времени.

Спасибо! Это привело меня к тому, что мне нужно было сделать. Я добавил файл webpack.config.js только с набором свойств плагина с помощью HtmlWebPackPlugin. Я удалил тег script из файла index.html и переместил файл в свой каталог src. Я отредактирую свой вопрос, чтобы добавить полную информацию о настройке.

nickstaroba 18.07.2019 05:57

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