mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
export default class PagesPlugin {
|
|
apply (compiler) {
|
|
const isImportChunk = /^chunks[/\\].*\.js$/
|
|
const matchChunkName = /^chunks[/\\](.*)$/
|
|
|
|
compiler.plugin('after-compile', (compilation, callback) => {
|
|
const chunks = Object
|
|
.keys(compilation.namedChunks)
|
|
.map(key => compilation.namedChunks[key])
|
|
.filter(chunk => isImportChunk.test(chunk.name))
|
|
|
|
chunks.forEach((chunk) => {
|
|
const asset = compilation.assets[chunk.name]
|
|
if (!asset) return
|
|
|
|
const chunkName = matchChunkName.exec(chunk.name)[1]
|
|
|
|
const content = asset.source()
|
|
const newContent = `
|
|
window.__NEXT_REGISTER_CHUNK('${chunkName}', function() {
|
|
${content}
|
|
})
|
|
`
|
|
// Replace the exisiting chunk with the new content
|
|
compilation.assets[chunk.name] = {
|
|
source: () => newContent,
|
|
size: () => newContent.length
|
|
}
|
|
|
|
// This is to support, webpack dynamic import support with HMR
|
|
compilation.assets[`chunks/${chunk.id}`] = {
|
|
source: () => newContent,
|
|
size: () => newContent.length
|
|
}
|
|
})
|
|
callback()
|
|
})
|
|
}
|
|
}
|