diff --git a/packages/next/build/load-jsconfig.ts b/packages/next/build/load-jsconfig.ts index 448c008f98769..bb99b55f518a6 100644 --- a/packages/next/build/load-jsconfig.ts +++ b/packages/next/build/load-jsconfig.ts @@ -5,7 +5,6 @@ import * as Log from './output/log' import { getTypeScriptConfiguration } from '../lib/typescript/getTypeScriptConfiguration' import { readFileSync } from 'fs' import isError from '../lib/is-error' -import { codeFrameColumns } from 'next/dist/compiled/babel/code-frame' let TSCONFIG_WARNED = false @@ -22,6 +21,7 @@ function parseJsonFile(filePath: string) { return JSON5.parse(contents) } catch (err) { if (!isError(err)) throw err + const { codeFrameColumns } = require('next/dist/compiled/babel/code-frame') const codeFrame = codeFrameColumns( String(contents), { diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index 2761d76409aa5..573f3ae6a7ccc 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -37,7 +37,6 @@ import MiddlewarePlugin from './webpack/plugins/middleware-plugin' import BuildManifestPlugin from './webpack/plugins/build-manifest-plugin' import { JsConfigPathsPlugin } from './webpack/plugins/jsconfig-paths-plugin' import { DropClientPage } from './webpack/plugins/next-drop-client-page-plugin' -import { TraceEntryPointsPlugin } from './webpack/plugins/next-trace-entrypoints-plugin' import PagesManifestPlugin from './webpack/plugins/pages-manifest-plugin' import { ProfilingPlugin } from './webpack/plugins/profiling-plugin' import { ReactLoadablePlugin } from './webpack/plugins/react-loadable-plugin' @@ -47,16 +46,14 @@ import { regexLikeCss } from './webpack/config/blocks/css' import { CopyFilePlugin } from './webpack/plugins/copy-file-plugin' import { FlightManifestPlugin } from './webpack/plugins/flight-manifest-plugin' import { ClientEntryPlugin } from './webpack/plugins/client-entry-plugin' -import { +import type { Feature, SWC_TARGET_TRIPLE, - TelemetryPlugin, } from './webpack/plugins/telemetry-plugin' import type { Span } from '../trace' import { withoutRSCExtensions } from './utils' import browserslist from 'next/dist/compiled/browserslist' import loadJsConfig from './load-jsconfig' -import { getMiddlewareSourceMapPlugins } from './webpack/plugins/middleware-source-maps-plugin' import { loadBindings } from './swc' const watchOptions = Object.freeze({ @@ -357,6 +354,7 @@ export default async function getBaseWebpackConfig( dir, config ) + const supportedBrowsers = await getSupportedBrowsers(dir, dev, config) const hasRewrites = @@ -607,21 +605,21 @@ export default async function getBaseWebpackConfig( if (dev) { customAppAliases[`${PAGES_DIR_ALIAS}/_app`] = [ - ...config.pageExtensions.reduce((prev, ext) => { + ...rawPageExtensions.reduce((prev, ext) => { prev.push(path.join(pagesDir, `_app.${ext}`)) return prev }, [] as string[]), 'next/dist/pages/_app.js', ] customAppAliases[`${PAGES_DIR_ALIAS}/_error`] = [ - ...config.pageExtensions.reduce((prev, ext) => { + ...rawPageExtensions.reduce((prev, ext) => { prev.push(path.join(pagesDir, `_error.${ext}`)) return prev }, [] as string[]), 'next/dist/pages/_error.js', ] customDocumentAliases[`${PAGES_DIR_ALIAS}/_document`] = [ - ...config.pageExtensions.reduce((prev, ext) => { + ...rawPageExtensions.reduce((prev, ext) => { prev.push(path.join(pagesDir, `_document.${ext}`)) return prev }, [] as string[]), @@ -1428,7 +1426,7 @@ export default async function getBaseWebpackConfig( isEdgeServer && !!config.experimental.middlewareSourceMaps && !config.productionBrowserSourceMaps - ? getMiddlewareSourceMapPlugins() + ? require('./webpack/plugins/middleware-source-maps-plugin').getMiddlewareSourceMapPlugins() : []), dev && isClient && new ReactRefreshWebpackPlugin(webpack), // Makes sure `Buffer` and `process` are polyfilled in client and flight bundles (same behavior as webpack 4) @@ -1571,12 +1569,14 @@ export default async function getBaseWebpackConfig( !isLikeServerless && (isNodeServer || isEdgeServer) && !dev && - new TraceEntryPointsPlugin({ - appDir: dir, - esmExternals: config.experimental.esmExternals, - staticImageImports: !config.images.disableStaticImages, - outputFileTracingRoot: config.experimental.outputFileTracingRoot, - }), + new (require('./webpack/plugins/next-trace-entrypoints-plugin').TraceEntryPointsPlugin)( + { + appDir: dir, + esmExternals: config.experimental.esmExternals, + staticImageImports: !config.images.disableStaticImages, + outputFileTracingRoot: config.experimental.outputFileTracingRoot, + } + ), // Moment.js is an extremely popular library that bundles large locale files // by default due to how Webpack interprets its code. This is a practical // solution that requires the user to opt into importing specific locales. @@ -1671,7 +1671,7 @@ export default async function getBaseWebpackConfig( })), !dev && isClient && - new TelemetryPlugin( + new (require('./webpack/plugins/telemetry-plugin').TelemetryPlugin)( new Map( [ ['swcLoader', useSWCLoader], @@ -1795,7 +1795,7 @@ export default async function getBaseWebpackConfig( const configVars = JSON.stringify({ crossOrigin: config.crossOrigin, - pageExtensions: config.pageExtensions, + pageExtensions: rawPageExtensions, trailingSlash: config.trailingSlash, buildActivity: config.devIndicators.buildActivity, buildActivityPosition: config.devIndicators.buildActivityPosition, diff --git a/packages/next/build/webpack/config/blocks/css/index.ts b/packages/next/build/webpack/config/blocks/css/index.ts index b44c4294591c2..28f70ba376eb6 100644 --- a/packages/next/build/webpack/config/blocks/css/index.ts +++ b/packages/next/build/webpack/config/blocks/css/index.ts @@ -1,6 +1,5 @@ import curry from 'next/dist/compiled/lodash.curry' import { webpack } from 'next/dist/compiled/webpack/webpack' -import MiniCssExtractPlugin from '../../../plugins/mini-css-extract-plugin' import { loader, plugin } from '../../helpers' import { ConfigurationContext, ConfigurationFn, pipe } from '../../utils' import { getCssModuleLoader, getGlobalCssLoader } from './loaders' @@ -414,6 +413,8 @@ export const css = curry(async function css( if (ctx.isClient && ctx.isProduction) { // Extract CSS as CSS file(s) in the client-side production bundle. + const MiniCssExtractPlugin = + require('../../../plugins/mini-css-extract-plugin').default fns.push( plugin( // @ts-ignore webpack 5 compat diff --git a/packages/next/build/webpack/config/blocks/css/loaders/client.ts b/packages/next/build/webpack/config/blocks/css/loaders/client.ts index 43436a53b297a..5afeb4dc41c95 100644 --- a/packages/next/build/webpack/config/blocks/css/loaders/client.ts +++ b/packages/next/build/webpack/config/blocks/css/loaders/client.ts @@ -1,5 +1,4 @@ -import { webpack } from 'next/dist/compiled/webpack/webpack' -import MiniCssExtractPlugin from '../../../../plugins/mini-css-extract-plugin' +import type { webpack } from 'next/dist/compiled/webpack/webpack' export function getClientStyleLoader({ isDevelopment, @@ -8,33 +7,37 @@ export function getClientStyleLoader({ isDevelopment: boolean assetPrefix: string }): webpack.RuleSetUseItem { - return isDevelopment - ? { - loader: 'next-style-loader', - options: { - // By default, style-loader injects CSS into the bottom - // of . This causes ordering problems between dev - // and prod. To fix this, we render a