Ich habe das HMR mit Webpack implementiert und es funktioniert ok. Wenn ich etwas ändere, sehe ich in der Konsole, dass es aktualisiert wurde, aber da ich es für das Serverbündel benutze, habe ich mich gefragt, ob ich das Signal an den Browser senden soll, nachdem HMR fertig ist, oder besser, wie man Hot Swap ohne Aktualisierung durchführt Browser?Verwendung von Webpack HMR (Hot-Modul Ersatz) ohne den Webpack-Dev-Server
Es funktioniert normalerweise auf der Clientseite, wo ich webpack-dev-server benutze, aber auf der Serverseite, wo ich webpack/hot/poll verwende, muss ich nach jeder Änderung manuell aktualisieren, um es im Browser zu sehen?
webpack.config.server.js
module.exports = {
...
watch: true,
target: 'node',
node: {
__dirname: true,
__filename: true
},
entry: {
bundle: [
'webpack/hot/poll?1000',
'./src/server/devServer'
]
},
output: {
path: path.join(__dirname, 'src', 'build'),
filename: '[name].js'
},
resolve: {
extensions: ['.js', '.jsx'],
alias: {
CountdownForm: path.resolve(__dirname, 'src/client/scenes/countdown/components/CountdownForm.jsx'),
...
}
},
externals: [nodeExternals({
whitelist: ['webpack/hot/poll?1000']
})],
...
plugins: [
new StartServerPlugin('bundle.js'),
new webpack.NamedModulesPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
new HtmlWebpackPlugin({
title: 'React Timer',
template: 'ejs-loader!./src/server/views/index.ejs'
}),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('development')
}
})
]
}
devserver
const server = http.createServer(app)
let currentApp = app
server.listen(PORT,() => {
console.log(`
Express server is up on port ${PORT}
Development environment - Webpack HMR active
`)
})
if (module.hot) {
module.hot.accept('./index',() => {
server.removeListener('request', currentApp)
currentApp = app
server.on('request', app)
})
}
Hallo Tim. Danke für die Antwort. Ich habe es mit webpack-dev-middleware und webpack-hot-middleware probiert und es hat mir überhaupt nicht gefallen. Jedes Mal, wenn ich etwas auf dem Server änderte, musste mein Client-Paket neu erstellt werden, obwohl ich HMR implementiert hatte und das Back-End ohne Neustart des Servers aktualisiert wurde. Alles funktionierte, aber es gab zu viele hickups mit joggling zwei Bündel. Es war in Ordnung mit einigen kleineren Apps ohne viel Backend-Logik. Nachdem ich es auf zwei Pakete und zwei Server aufgeteilt habe, hat alles besser funktioniert. Nur müssen Sie herausfinden, wie man jetzt ohne devServer hot tauschen kann. –