Что делает ленивый режим webpack dev server?
Я запускаю свой webpack-dev-сервер с помощью
webpack-dev-server --lazy --inline --progress --colors --port 8082
Однако это показывает ошибку 404 в моем браузере, когда он пытается получить доступ к bundle.js
.
Все остальное кажется прекрасным, поскольку, если я заменил --lazy
на --hot
, все будет работать нормально.
Что именно делает --lazy
?
Обновить:
Вот файл webpack -
module.exports = {
devtool: "source-map",
entry: [
'webpack/hot/only-dev-server', // "only" prevents reload on syntax errors
"./app/main.js"
],
output: {
path: "./js",
filename: "bundle.js"
},
module: {
loaders: [
{ test: /\.css$/, loader: "style-loader!css-loader"},
{ test: /\.js$/, exclude: /node_modules/, loaders: ["react-hot"] }
]
}
};
Ответы
Ответ 1
После некоторой отладки я обнаружил, что в webpack-dev-middleware
(в функции webpackDevMiddleware
) есть следующий оператор if:
// in lazy mode, rebuild on bundle request
if(options.lazy && (!options.filename || options.filename.test(filename))) {
rebuild();
}
Функция rebuild()
никогда не выполняется, потому что options.filename.test(filename)
aways возвращает false
. И это потому, что filename
имеет косую черту ("/bundle.js"). Таким образом, я изменил regex options.filename
чтобы разрешить эту косую черту, и она исправила проблему.
Я сделал запрос на перенос на github: https://github.com/webpack/webpack-dev-middleware/pull/62
Ответ 2
Ленивый режим просто не перекомпилируется при каждом изменении, но ждет вместо этого следующего вызова на входную точку для проверки изменений
Ответ 3
Вот разница между --lazy и --hot:
--lazy: no watching, compiles on request.
--hot: adds the HotModuleReplacementPlugin and switch the server to hot mode.
Кроме того, найдите дополнительную информацию о HotModuleReplacementPlugin здесь: https://github.com/webpack/docs/wiki/list-of-plugins.
См. Http://webpack.github.io/docs/webpack-dev-server.html.