Это пост с инструкциями по настройке webpack-dev-сервера с включенным HMR для работы бок о бок с сервером Laravel.

Важно: я предполагаю, что у вас есть работающий файл конфигурации веб-пакета, поэтому я не буду вдаваться в подробности о том, как настроить ваши загрузчики и плагины.

Чего мы хотим достичь

Команда webpack-dev-server запускает статический файловый сервер для обслуживания сгенерированных пакетов и файлов в настроенной корневой папке. Это хорошо, если вы просто кодируете проекты на чистом HTML / CSS / JS. Проблема, которая возникает при разработке приложения с файлами PHP, заключается в том, что наши файлы не могут обрабатываться этим статическим файловым сервером.

Обычный процесс разработки с помощью webpack будет выглядеть следующим образом:

Интегрируя это с Laravel, нам нужно запустить webpack-dev-server бок о бок с нашим обычным PHP-сервером. Для этой настройки процесс будет выглядеть следующим образом:

Уловка здесь в том, что мы обслуживаем сгенерированный пакет не через PHP-сервер, а через webpack-dev-server. Мы делаем это, просто ссылаясь на URL-адрес webpack-dev-server как на источник наших скриптов.

Итак, вместо этого:

<script src="/assets/app.js"></script>

мы включаем это в режим разработки:

<script src="http://localhost:8080/main.js"></script>

Конфигурация веб-пакета

Webpack-dev-сервер можно настроить в разделе devserver файла webpack.config.js.

devserver: {
  hot: true, // this enables hot reload
  inline: true, // use inline method for hmr 
  host: "localhost",
  port: 8080,
  contentBase: path.join(__dirname, "public"), // should point to the laravel public folder
  watchOptions: {
    poll: false // needed for homestead/vagrant setup
  }
}

В настройках вывода вашей конфигурации вы должны указать общедоступный путь к URL-адресу, который соответствует URL-адресу webpack-dev-server.

output: {
  /*
   ...
  */
  publicPath: 'http://localhost:8080'
}

Наконец, вам нужно включить плагин HMR в раздел плагинов конфигурации вашего веб-пакета.

plugins: [
  new webpack.HotModuleReplacementPlugin()
]

Запуск ваших серверов

Используя встроенный сервер Laravel на localhost: 8000 и webpack-dev-server на localhost: 8080, вы теперь сможете обслуживать свое приложение с активированной HMR. Поэтому всякий раз, когда вы меняете свой JavaScript, вместо полной перезагрузки страницы модули заменяются на лету.