mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
dec85fe6c4
* Introduce script tag based page loading system. * Call ensurePage only in the dev mode. * Implement router using the page-loader. * Fix a typo and remove unwanted code. * Fix some issues related to rendering. * Fix production tests. * Fix ondemand test cases. * Fix unit tests. * Get rid of eval completely. * Remove all the inline code. * Remove the json-pages plugin. * Rename NEXT_PAGE_LOADER into __NEXT_PAGE_LOADER__ * Rename NEXT_LOADED_PAGES into __NEXT_LOADED_PAGES__ * Remove some unwanted code. * Load everything async. * Remove lib/eval-script.js We no longer need it. * Move webpack idle wait code to the page-loader. Because that's the place to do it. * Remove pageNotFound key from the error. * Remove unused error field 'buildError' * Add much better logic to normalize routes. * Get rid of mitt. * Introduce a better way to register pages. * Came back to the mitt() based page-loader. * Add link rel=preload support. * Add assetPrefix support to add support for CDNs. * Add assetPrefix support for preload links. * Update readme.md
34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
export default class PagesPlugin {
|
|
apply (compiler) {
|
|
const isBundledPage = /^bundles[/\\]pages.*\.js$/
|
|
const matchRouteName = /^bundles[/\\]pages[/\\](.*)\.js$/
|
|
|
|
compiler.plugin('after-compile', (compilation, callback) => {
|
|
const pages = Object
|
|
.keys(compilation.namedChunks)
|
|
.map(key => compilation.namedChunks[key])
|
|
.filter(chunk => isBundledPage.test(chunk.name))
|
|
|
|
pages.forEach((chunk) => {
|
|
const page = compilation.assets[chunk.name]
|
|
const pageName = matchRouteName.exec(chunk.name)[1]
|
|
const routeName = `/${pageName.replace(/[/\\]?index$/, '')}`
|
|
|
|
const content = page.source()
|
|
const newContent = `
|
|
window.__NEXT_REGISTER_PAGE('${routeName}', function() {
|
|
var comp = ${content}
|
|
return { page: comp.default }
|
|
})
|
|
`
|
|
// Replace the exisiting chunk with the new content
|
|
compilation.assets[chunk.name] = {
|
|
source: () => newContent,
|
|
size: () => newContent.length
|
|
}
|
|
})
|
|
callback()
|
|
})
|
|
}
|
|
}
|