2024-02-24 00:37:31 +08:00

189 lines
7.5 KiB
JavaScript

// Synchronously inject a require hook for webpack and webpack/. It's required to use the internal ncc webpack version.
// This is needed for userland plugins to attach to the same webpack instance as Next.js'.
// Individually compiled modules are as defined for the compilation in bundles/webpack/packages/*.
// This module will only be loaded once per process.
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "addHookAliases", {
enumerable: true,
get: function() {
return addHookAliases;
}
});
const { dirname } = require("path");
const mod = require("module");
const resolveFilename = mod._resolveFilename;
const hookPropertyMap = new Map();
let aliasedPrebundledReact = false;
function addHookAliases(aliases = []) {
for (const [key, value] of aliases){
hookPropertyMap.set(key, value);
}
}
// Add default aliases
addHookAliases([
// Use `require.resolve` explicitly to make them statically analyzable
// styled-jsx needs to be resolved as the external dependency.
[
"styled-jsx",
dirname(require.resolve("styled-jsx/package.json"))
],
[
"styled-jsx/style",
require.resolve("styled-jsx/style")
]
]);
// Override built-in React packages if necessary
function overrideReact() {
if (process.env.__NEXT_PRIVATE_PREBUNDLED_REACT) {
aliasedPrebundledReact = true;
// Require these modules with static paths to make sure they are tracked by
// NFT when building the app in standalone mode, as we are now conditionally
// aliasing them it's tricky to track them in build time.
if (process.env.__NEXT_PRIVATE_PREBUNDLED_REACT === "experimental") {
addHookAliases([
[
"react",
require.resolve(`next/dist/compiled/react-experimental`)
],
[
"react/jsx-runtime",
require.resolve(`next/dist/compiled/react-experimental/jsx-runtime`)
],
[
"react/jsx-dev-runtime",
require.resolve(`next/dist/compiled/react-experimental/jsx-dev-runtime`)
],
[
"react-dom",
require.resolve(`next/dist/compiled/react-dom-experimental/server-rendering-stub`)
],
[
"react/package.json",
require.resolve(`next/dist/compiled/react-experimental/package.json`)
],
[
"react-dom/package.json",
require.resolve(`next/dist/compiled/react-dom-experimental/package.json`)
],
[
"react-dom/client",
require.resolve(`next/dist/compiled/react-dom-experimental/client`)
],
[
"react-dom/server",
require.resolve(`next/dist/compiled/react-dom-experimental/server`)
],
[
"react-dom/server.browser",
require.resolve(`next/dist/compiled/react-dom-experimental/server.browser`)
],
[
"react-dom/server.edge",
require.resolve(`next/dist/compiled/react-dom-experimental/server.edge`)
],
[
"react-server-dom-webpack/client",
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/client`)
],
[
"react-server-dom-webpack/client.edge",
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/client.edge`)
],
[
"react-server-dom-webpack/server.edge",
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/server.edge`)
],
[
"react-server-dom-webpack/server.node",
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/server.node`)
]
]);
} else {
addHookAliases([
[
"react",
require.resolve(`next/dist/compiled/react`)
],
[
"react/package.json",
require.resolve(`next/dist/compiled/react/package.json`)
],
[
"react/jsx-runtime",
require.resolve(`next/dist/compiled/react/jsx-runtime`)
],
[
"react/jsx-dev-runtime",
require.resolve(`next/dist/compiled/react/jsx-dev-runtime`)
],
[
"react-dom",
require.resolve(`next/dist/compiled/react-dom/server-rendering-stub`)
],
[
"react-dom/package.json",
require.resolve(`next/dist/compiled/react-dom/package.json`)
],
[
"react-dom/client",
require.resolve(`next/dist/compiled/react-dom/client`)
],
[
"react-dom/server",
require.resolve(`next/dist/compiled/react-dom/server`)
],
[
"react-dom/server.browser",
require.resolve(`next/dist/compiled/react-dom/server.browser`)
],
[
"react-dom/server.edge",
require.resolve(`next/dist/compiled/react-dom/server.edge`)
],
[
"react-server-dom-webpack/client",
require.resolve(`next/dist/compiled/react-server-dom-webpack/client`)
],
[
"react-server-dom-webpack/client.edge",
require.resolve(`next/dist/compiled/react-server-dom-webpack/client.edge`)
],
[
"react-server-dom-webpack/server.edge",
require.resolve(`next/dist/compiled/react-server-dom-webpack/server.edge`)
],
[
"react-server-dom-webpack/server.node",
require.resolve(`next/dist/compiled/react-server-dom-webpack/server.node`)
]
]);
}
} else {
addHookAliases([
[
"react/jsx-runtime",
require.resolve(`react/jsx-runtime`)
],
[
"react/jsx-dev-runtime",
require.resolve(`react/jsx-dev-runtime`)
]
]);
}
}
overrideReact();
mod._resolveFilename = (function(originalResolveFilename, requestMap, request, parent, isMain, options) {
if (process.env.__NEXT_PRIVATE_PREBUNDLED_REACT && !aliasedPrebundledReact) {
// In case the environment variable is set after the module is loaded.
overrideReact();
}
const hookResolved = requestMap.get(request);
if (hookResolved) request = hookResolved;
return originalResolveFilename.call(mod, request, parent, isMain, options);
// We use `bind` here to avoid referencing outside variables to create potential memory leaks.
}).bind(null, resolveFilename, hookPropertyMap);
//# sourceMappingURL=require-hook.js.map