diff --git a/packages/next/client/script.tsx b/packages/next/client/script.tsx index 5162fbe30609..c1adef2378bd 100644 --- a/packages/next/client/script.tsx +++ b/packages/next/client/script.tsx @@ -215,4 +215,6 @@ function Script(props: ScriptProps): JSX.Element | null { return null } +Object.defineProperty(Script, '__nextScript', { value: true }) + export default Script diff --git a/packages/next/pages/_document.tsx b/packages/next/pages/_document.tsx index b0a4a65f38a7..9d601b89bd55 100644 --- a/packages/next/pages/_document.tsx +++ b/packages/next/pages/_document.tsx @@ -10,10 +10,10 @@ import type { DocumentType, NEXT_DATA, } from '../shared/lib/utils' +import type { ScriptProps } from '../client/script' + import { BuildManifest, getPageFiles } from '../server/get-page-files' -import { cleanAmpPath } from '../server/utils' import { htmlEscapeJsonString } from '../server/htmlescape' -import Script, { ScriptProps } from '../client/script' import isError from '../lib/is-error' import { HtmlContext } from '../shared/lib/html-context' @@ -765,7 +765,10 @@ export class Head extends Component { {!hasCanonicalRel && ( )} {/* https://www.ampproject.org/docs/fundamentals/optimize_amp#optimize-the-amp-runtime-loading */} @@ -871,7 +874,8 @@ function handleDocumentScriptLoaderItems( React.Children.forEach(combinedChildren, (child: any) => { if (!child) return - if (child.type === Script) { + // When using the `next/script` component, register it in script loader. + if (child.type?.__nextScript) { if (child.props.strategy === 'beforeInteractive') { scriptLoader.beforeInteractive = ( scriptLoader.beforeInteractive || []