2021-02-04 09:49:42 +01:00
|
|
|
// sync injects a hook for webpack and webpack/... requires to use the internal ncc webpack version
|
|
|
|
// this is in order for userland plugins to attach to the same webpack instance as next.js
|
|
|
|
// the individual compiled modules are as defined for the compilation in bundles/webpack/packages/*
|
|
|
|
|
2022-08-09 03:27:42 +02:00
|
|
|
export default function loadRequireHook(aliases: [string, string][] = []) {
|
|
|
|
const hookPropertyMap = new Map(
|
|
|
|
[
|
|
|
|
...aliases,
|
|
|
|
// Use `require.resolve` explicitly to make them statically analyzable
|
2022-08-12 19:08:38 +02:00
|
|
|
['styled-jsx', require.resolve('styled-jsx')],
|
|
|
|
['styled-jsx/style', require.resolve('styled-jsx/style')],
|
2022-08-09 03:27:42 +02:00
|
|
|
].map(([request, replacement]) => [request, replacement])
|
|
|
|
)
|
2021-02-04 09:49:42 +01:00
|
|
|
|
2022-08-09 03:27:42 +02:00
|
|
|
const mod = require('module')
|
|
|
|
const resolveFilename = mod._resolveFilename
|
|
|
|
mod._resolveFilename = function (
|
|
|
|
request: string,
|
|
|
|
parent: any,
|
|
|
|
isMain: boolean,
|
|
|
|
options: any
|
|
|
|
) {
|
|
|
|
const hookResolved = hookPropertyMap.get(request)
|
|
|
|
if (hookResolved) request = hookResolved
|
|
|
|
return resolveFilename.call(mod, request, parent, isMain, options)
|
|
|
|
}
|
2021-02-04 09:49:42 +01:00
|
|
|
}
|