import { join, resolve, relative, dirname } from 'path' // This plugin modifies the require-ensure code generated by Webpack // to work with Next.js SSR export default class NextJsSsrImportPlugin { apply (compiler) { compiler.hooks.compilation.tap('NextJsSSRImport', (compilation) => { compilation.mainTemplate.hooks.requireEnsure.tap('NextJsSSRImport', (code, chunk) => { // Update to load chunks from our custom chunks directory const outputPath = resolve('/') const pagePath = join('/', dirname(chunk.name)) const relativePathToBaseDir = relative(pagePath, outputPath) // Make sure even in windows, the path looks like in unix // Node.js require system will convert it accordingly const relativePathToBaseDirNormalized = relativePathToBaseDir.replace(/\\/g, '/') return code.replace('require("./"', `require("${relativePathToBaseDirNormalized}/"`).replace('readFile(join(__dirname', `readFile(join(__dirname, "${relativePathToBaseDirNormalized}"`) }) }) } }