Webpack hot reloading (webpack-hot-middleware) прекрасно работает для клиента; он восстанавливает и обновляет активы на клиенте всякий раз, когда файл изменяется. Но для универсальных/изоморфных серверов, где серверу требуется предварительный ответ HTML, это очень сложно.webpack - перезагрузка горячего модуля на сервере
Наивное решение состоит в том, чтобы перезапустить сервер, когда файл был изменен, но это закрывает все клиентские подключения, а для больших серверов это очень медленно.
Немного лучшее решение для ручного просмотра активов (например, с помощью chokidar) и очистки кеша/необходимости снова после изменения файла. Но для этого требуется дополнительная сложность, когда необходимо следить за зависимостями; файлы должны быть проанализированы, чтобы определить, что им требуется.
Кроме того, если код написан на языке компиляции в js, лучше всего запустить скомпилированный сервер для производства (не более babel-node). С скомпилированный сервером, он больше не является возможным использовать механизм, описанный выше, потому что:
- WebPack имеет плохую поддержку динамических требует:
require(variable)
в отличие отrequire('./file.js')
- узел не может напрямую требовать код
В моем случае я отменил функцию require в пакете, который использует babel-register
ed require (ранее я использовал API-интерфейс babel, но полагался на много недокументированного источника узла).
Это решение, которое я использую в настоящее время в https://github.com/edge/cyc, которое работает несколько, но оно беспорядочно и имеет множество предостережений. В общем, чем больше пользовательского кода, написанного параллельно webpack, тем дальше от желаемого поведения.
Есть ли надежный способ более простого дублирования поведения webpack?