mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
|
|
// watch and trigger file remove event
|
|
// see: https://github.com/webpack/webpack/issues/1533
|
|
|
|
export default class WatchRemoveEventPlugin {
|
|
constructor () {
|
|
this.removedFiles = []
|
|
}
|
|
|
|
apply (compiler) {
|
|
compiler.removedFiles = []
|
|
|
|
compiler.plugin('environment', () => {
|
|
if (!compiler.watchFileSystem) return
|
|
|
|
const { watchFileSystem } = compiler
|
|
const { watch } = watchFileSystem
|
|
|
|
watchFileSystem.watch = (files, dirs, missing, startTime, options, callback, callbackUndelayed) => {
|
|
const result = watch.call(watchFileSystem, files, dirs, missing, startTime, options, (...args) => {
|
|
compiler.removedFiles = this.removedFiles
|
|
this.removedFiles = []
|
|
callback(...args)
|
|
}, callbackUndelayed)
|
|
|
|
const watchpack = watchFileSystem.watcher
|
|
watchpack.fileWatchers.forEach((w) => {
|
|
w.on('remove', this.onRemove.bind(this, watchpack, w.path))
|
|
})
|
|
return result
|
|
}
|
|
})
|
|
}
|
|
|
|
onRemove (watchpack, file) {
|
|
this.removedFiles.push(file)
|
|
watchpack.emit('remove', file)
|
|
watchpack._onChange(file)
|
|
}
|
|
}
|