fix(admin): close webpack watch on reload (#18667)

This commit is contained in:
Alexandre BODIN 2023-11-03 16:28:46 +01:00 committed by GitHub
parent 0e69461383
commit 805908ba2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 4 deletions

View File

@ -85,7 +85,7 @@ const develop = async ({ cwd, polling, logger, tsconfig, ...options }: DevelopOp
EE.init(cwd);
await writeStaticClientFiles(ctx);
await watchWebpack(ctx);
const webpackWatcher = await watchWebpack(ctx);
const adminDuration = timer.end('creatingAdmin');
adminSpinner.text = `Creating admin (${adminDuration}ms)`;
@ -165,6 +165,7 @@ const develop = async ({ cwd, polling, logger, tsconfig, ...options }: DevelopOp
);
await watcher.close();
await strapiInstance.destroy();
webpackWatcher.close();
process.send?.('killed');
break;
}

View File

@ -1,5 +1,6 @@
import os from 'node:os';
import path from 'node:path';
import { promisify } from 'node:util';
import webpackDevMiddleware from 'webpack-dev-middleware';
import webpackHotMiddleware from 'webpack-hot-middleware';
import { webpack } from 'webpack';
@ -7,13 +8,17 @@ import type { BuildContext } from '../createBuildContext';
import { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';
import { Common } from '@strapi/types';
const watch = async (ctx: BuildContext) => {
interface Closer {
close(): Promise<void>;
}
const watch = async (ctx: BuildContext): Promise<Closer> => {
const config = await resolveDevelopmentConfig(ctx);
const finalConfig = await mergeConfigWithUserConfig(config, ctx);
ctx.logger.debug('Final webpack config:', os.EOL, finalConfig);
return new Promise((res) => {
return new Promise<Closer>((res) => {
const compiler = webpack(finalConfig);
const devMiddleware = webpackDevMiddleware(compiler);
@ -91,7 +96,15 @@ const watch = async (ctx: BuildContext) => {
]);
devMiddleware.waitUntilValid(() => {
res(true);
res({
async close() {
await Promise.all([
promisify(devMiddleware.close.bind(devMiddleware))(),
hotMiddleware.close(),
promisify(compiler.close.bind(compiler))(),
]);
},
});
});
});
};