До разделения моего кода на бэкэнд и фронтэнд у меня был только фронтенд. Чтобы использовать HMR, я просто имею в конфигурации веб-пакета:
module.exports = { // Frontend
mode: 'development',
target: 'web',
entry: join(__dirname, '/src/frontend/app.js'),
output: {
path: join(__dirname, 'dist/frontend'),
filename: 'app.bundled.js'
},
devtool: 'inline-source-map',
devServer: {
port: 1000,
hot: true,
open: true,
},
resolve: // ...
module: {
rules: [
// ...
]
},
plugins: [
new HotModuleReplacementPlugin(),
new HTMLWebpackPlugin({
showErrors: true,
cache: true,
template: join(__dirname, 'src/frontend/index.html')
}),
// ...
],
}
и выполняю его, используя (из package.json
):
"scripts" : {
"start": "webpack-dev-server"
}
Теперь я решил добавить веб-пакет в бэкэнд, использующий другую конфигурацию.
Я понятия не имею, как включить горячую замену модуля с помощью этой схемы. Я новичок в веб-разработке, поэтому я едва справился с этим без регистрации ошибок.
Это мой текущий файл конфигурации:
const HTMLWebpackPlugin = require('html-webpack-plugin');
const { join } = require('path');
const { HotModuleReplacementPlugin } = require('webpack');
const nodeExternals = require('webpack-node-externals');
module.exports = [
{ // Backend
mode: 'development',
target: 'node',
entry: join(__dirname, '/src/backend/server.js'),
output: {
path: join(__dirname, 'dist/backend'),
filename: 'server.bundled.js',
libraryTarget: 'commonjs2'
},
devtool: 'inline-source-map',
resolve: //...
externals: [nodeExternals()],
module: {
rules: [
// ...
]
},
plugins: [
new HotModuleReplacementPlugin()
]
},
{ // Frontend
mode: 'development',
target: 'web',
entry: join(__dirname, '/src/frontend/app.js'),
output: {
path: join(__dirname, 'dist/frontend'),
filename: 'app.bundled.js'
},
devtool: 'inline-source-map',
resolve: // ...
module: {
rules: [
// ...
]
},
plugins: [
new HotModuleReplacementPlugin(),
new HTMLWebpackPlugin({
showErrors: true,
cache: true,
template: join(__dirname, 'src/frontend/index.html')
}),
// ...
],
}
];
На данный момент я выполняю это, используя:
"scripts" : {
"build": "webpack",
"open": "start http://localhost:8080",
"launch": "npm run-script open && node dist/backend/server.bundled.js",
"start": "npm run-script build && npm run-script launch"
}
Но у меня больше нет горячей перезагрузки.
Итак, вопрос: Как я могу использовать горячую перезагрузку с двумя конфигурациями webpack (frontend, backend)?
Я видел этот вопрос , но он использует одну конфигурацию веб-пакета, поэтому я не думаю, что она применима к моему делу.