rsnext/packages/next/build/webpack/plugins/unlink-removed-pages-plugin.ts
Guy Bedford e85a517e1a ncc Webpack build redux (#7628)
* Reimplement ncc webpack build

This reverts commit 6feca310d7.

* Shared webpack build

* ncc workaround pending @zeit/ncc#437

* update ncc

* build tweaks, fixup autodll-import

* possible Node 8 fix

* second possible Node 8 fix

* and update taskfile
2019-06-21 12:28:41 -04:00

40 lines
1.1 KiB
TypeScript

import { join } from 'path'
import { promisify } from 'util'
import fs from 'fs'
import { IS_BUNDLED_PAGE_REGEX } from 'next-server/constants'
import { Compiler } from 'next/dist/compiled/webpack.js'
const unlink = promisify(fs.unlink)
// Makes sure removed pages are removed from `.next` in development
export class UnlinkRemovedPagesPlugin {
prevAssets: any
constructor() {
this.prevAssets = {}
}
apply(compiler: Compiler) {
compiler.hooks.afterEmit.tapAsync(
'NextJsUnlinkRemovedPages',
(compilation, callback) => {
const removed = Object.keys(this.prevAssets).filter(
a => IS_BUNDLED_PAGE_REGEX.test(a) && !compilation.assets[a]
)
this.prevAssets = compilation.assets
Promise.all(
removed.map(async f => {
const path = join((compiler as any).outputPath, f)
try {
await unlink(path)
} catch (err) {
if (err.code === 'ENOENT') return
throw err
}
})
).then(() => callback(), callback)
}
)
}
}