rsnext/packages/next/build/webpack/plugins/unlink-removed-pages-plugin.ts
Tim Neutkens 6feca310d7
Revert ncc webpack (#7370)
* Revert "Add retrying to CircleCi and fixes for ncc'ed webpack (#7366)"

This reverts commit 5beb365d12.

* Revert "ncc Webpack build (#7301)"

This reverts commit bd8f3c625f.

# Conflicts:
#	packages/next/package.json
2019-05-17 13:25:46 +02:00

35 lines
1,001 B
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 'webpack'
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)
})
}
}