Может ли webpack сообщить, какой файл вызвал компиляцию в режиме просмотра?
Я хотел бы, чтобы Webpack регистрировал, какой файл вызвал мою сборку режима часов.
Я настроил плагин, который слушает watch-run
компилятор событие крюк, как это:
function() {
this.plugin("watch-run", function(watching, callback) {
// maybe something in `watching` will indicate the changed file?
// when I find out what it is, `console.log` it here
callback();
});
}
// Example output: "/Users/aaron/git/test/index.js" was changed, new build triggered
но я не могу понять, где может быть измененная информация о файле, если она вообще есть.
документация Webpack действительно отсутствует в этой области. The Крюк Событий Компилятора страница не имеет примеров (только сообщение, чтобы объяснить, что примеры скоро придут), а то старая документация v1 не намного лучше при разработке свойств / методов, доступных в watching
/compiler
"объект".
любая помощь или руководство будет принята с благодарностью.
2 ответов
такого рода информация не охватывается документацией webpack, и было бы трудно включить все возможные опции, доступные в компиляторе. Но я бы сказал, что это область, где вы должны изучить доступные параметры, либо прочитав исходный код, либо развернув отладчик и исследуя их. Я сделал последнее и обнаружил, что измененные файлы доступны в:
watching.compiler.watchFileSystem.watcher.mtimes
это объект, где каждый ключ является абсолютным путем к файлу это было изменено, и значение является меткой времени, когда оно было изменено. При сохранении нескольких изменений в настроенном интервале опроса возможно несколько изменений файла, запускающих перекомпиляцию.
следующий код печатает файлы, которые были изменены (файлы могут быть пустыми):
this.plugin("watch-run", (watching, done) => {
const changedTimes = watching.compiler.watchFileSystem.watcher.mtimes;
const changedFiles = Object.keys(changedTimes)
.map(file => `\n ${file}`)
.join("");
if (changedFiles.length) {
console.log("New build triggered, files changed:", changedFiles);
}
done();
});
пример вывода этого:
New build triggered, files changed:
/path/to/app/src/components/item/Item.js
/path/to/app/src/App.js
Примечание: этот выход придет до окончательной статистики напечатанный.
в webpack 4 Вы можете получить доступ к watcher
таким образом:
getChangedFiles(compiler) {
const { watchFileSystem } = compiler;
const watcher = watchFileSystem.watcher || watchFileSystem.wfs.watcher;
return Object.keys(watcher.mtimes);
}
последний в watchRun крюк
compiler.hooks.watchRun.tapAsync('plugin name', (_compiler, done) => {
const changedFile = this.getChangedFiles(_compiler)
// ...
return done();
});