Fix: disable script worker in edge and fix rsc loader and runtime (#35604)

* Disable script worker for edge runtime (could lead to build error)
* Fix rsc loader CJS detection
* Fix pagePath searching for per-page runtime

test through rsc notes demo, successful deployment: https://next-rsc-notes-9bix7l1nu.vercel.sh/
This commit is contained in:
Jiachi Liu 2022-03-26 10:28:14 +01:00 committed by GitHub
parent 24c0fc0169
commit b82f546526
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 9 additions and 4 deletions

View file

@ -960,8 +960,10 @@ export default async function build(
let ssgPageRoutes: string[] | null = null
let isMiddlewareRoute = !!page.match(MIDDLEWARE_ROUTE)
const pagePath = pagePaths.find((_path) =>
_path.startsWith(actualPage + '.')
const pagePath = pagePaths.find(
(p) =>
p.startsWith(actualPage + '.') ||
p.startsWith(actualPage + '/index.')
)
const pageRuntime =
hasConcurrentFeatures && pagePath
@ -974,7 +976,7 @@ export default async function build(
if (
!isMiddlewareRoute &&
!isReservedPage(page) &&
// We currently don't support staic optimization in the Edge runtime.
// We currently don't support static optimization in the Edge runtime.
pageRuntime !== 'edge'
) {
try {

View file

@ -981,6 +981,7 @@ export default async function getBaseWebpackConfig(
...(isEdgeRuntime
? [
{
'@builder.io/partytown': '{}',
'next/dist/compiled/etag': '{}',
'next/dist/compiled/chalk': '{}',
'react-dom': '{}',

View file

@ -14,6 +14,7 @@ export function buildExports(moduleExports: any, isESM: boolean) {
const esmNodeTypes = [
'ImportDeclaration',
'ExportDeclaration',
'ExportNamedDeclaration',
'ExportDefaultExpression',
'ExportDefaultDeclaration',

View file

@ -79,7 +79,8 @@ function hasComponentProps(child: any): child is React.ReactElement {
function getPreNextWorkerScripts(context: HtmlProps, props: OriginProps) {
const { assetPrefix, scriptLoader, crossOrigin, nextScriptWorkers } = context
if (!nextScriptWorkers) return null
// disable `nextScriptWorkers` in edge runtime
if (!nextScriptWorkers || process.browser) return null
try {
let {