mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
8c6a4ebb1d
This fixes the generated page chunk created by the webpack `pages-plugin` which adds a new line in the beginning of the template, when using `output.libraryTarget` set to be [`umd`](https://webpack.js.org/configuration/output/#module-definition-systems) it returns the module. Consider the following example, which is the output with the previous implementation: ```js (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["MyLibrary"] = factory(); else root["MyLibrary"] = factory(); })(typeof self !== 'undefined' ? self : this, function() { return __NEXT_REGISTER_PAGE(...) }); ``` `__NEXT_REGISTER_PAGE()` won't be executed since a `return` statement followed by a new line is the same as having a semicolon inserted right after the `return`. By removing the new line in the beginning of the source concatenation (which I suppose was added for stylistic reasons) this works as expected.
51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
import { ConcatSource } from 'webpack-sources'
|
|
import {
|
|
IS_BUNDLED_PAGE,
|
|
MATCH_ROUTE_NAME
|
|
} from '../../utils'
|
|
|
|
class PageChunkTemplatePlugin {
|
|
apply (chunkTemplate) {
|
|
chunkTemplate.plugin('render', function (modules, chunk) {
|
|
if (!IS_BUNDLED_PAGE.test(chunk.name)) {
|
|
return modules
|
|
}
|
|
|
|
let routeName = MATCH_ROUTE_NAME.exec(chunk.name)[1]
|
|
|
|
// We need to convert \ into / when we are in windows
|
|
// to get the proper route name
|
|
// Here we need to do windows check because it's possible
|
|
// to have "\" in the filename in unix.
|
|
// Anyway if someone did that, he'll be having issues here.
|
|
// But that's something we cannot avoid.
|
|
if (/^win/.test(process.platform)) {
|
|
routeName = routeName.replace(/\\/g, '/')
|
|
}
|
|
|
|
routeName = `/${routeName.replace(/(^|\/)index$/, '')}`
|
|
|
|
const source = new ConcatSource()
|
|
|
|
source.add(`__NEXT_REGISTER_PAGE('${routeName}', function() {
|
|
var comp =
|
|
`)
|
|
source.add(modules)
|
|
source.add(`
|
|
return { page: comp.default }
|
|
})
|
|
`)
|
|
|
|
return source
|
|
})
|
|
}
|
|
}
|
|
|
|
export default class PagesPlugin {
|
|
apply (compiler) {
|
|
compiler.plugin('compilation', (compilation) => {
|
|
compilation.chunkTemplate.apply(new PageChunkTemplatePlugin())
|
|
})
|
|
}
|
|
}
|