Принудительно перезагрузить webpack-dev-server - PullRequest
0 голосов
/ 27 марта 2020

Я пишу плагин для веб-пакета, который запускает хороший забор в фоновом режиме, используя EXECA. После окончания работы я добавляю ошибки в массив compilation.errors. Поскольку execa запускается в отдельных ошибках процесса, добавленных после завершения процесса компиляции веб-пакета. В результате webpack-dev-server перезагружает страницу без ошибок. Мне пришлось вручную перезагрузить страницу, чтобы увидеть ошибки. Есть ли способ заставить webpack-dev-server перезагрузиться?

const execa = require('execa');

class GoodFencesWebpackPlugin {
    apply(compiler) {
        let subprocess = null;

        compiler.hooks.make.tap('GoodFencesWebpackPlugin', async (compilation) => {
             const logger = compiler.getInfrastructureLogger('GoodFencesWebpackPlugin');

            if (subprocess) {
                subprocess.kill();
                subprocess = null;
            }

            subprocess = execa('good-fences');
            try {
                await subprocess;
            }
            catch (err) {
                logger.error("\x1b[31m", err.stderr);
                compilation.errors.push(err.stderr);
            }

            subprocess = null;
        })
    }
}

module.exports = GoodFencesWebpackPlugin;

1 Ответ

0 голосов
/ 28 марта 2020

После копания в исходных кодах webpack-development-server я обнаружил, что можно LiveReoload программно, вызвав обработчик hook на экземпляре компилятора. Это работает, потому что я обновил compilation.errors. Поэтому я делаю следующее

const execa = require('execa');

class GoodFencesWebpackPlugin {
    apply(compiler) {
        console.log("plugin");
        let subprocess = null;
        let thisStats;

        compiler.hooks.done.tap('GoodFencesWebpackPlugin', async (stats) => {
            thisStats = stats;
        });

        compiler.hooks.afterEmit.tap('GoodFencesWebpackPlugin', async (compilation) => {
             const logger = compiler.getInfrastructureLogger('GoodFencesWebpackPlugin');
            if (subprocess) {
                subprocess.kill();
                subprocess = null;
            }

            subprocess = execa('good-fences');
            try {
                await subprocess;
            }
            catch (err) {
                logger.error("\x1b[31m", err.stderr);
                compilation.errors.push(err.stderr);
                if (thisStats) {
                    compiler.hooks.done.callAsync(thisStats, () => {});
                }
            }
            finally {
                subprocess = null;
            }
        })
    }
}

module.exports = GoodFencesWebpackPlugin;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...