diff --git a/packages/next/shared/lib/dynamic.tsx b/packages/next/shared/lib/dynamic.tsx index 456b7dc458f014f..4a39705f0ceb9c7 100644 --- a/packages/next/shared/lib/dynamic.tsx +++ b/packages/next/shared/lib/dynamic.tsx @@ -88,7 +88,7 @@ export default function dynamic

( // A loading component is not required, so we default it loading: ({ error, isLoading, pastDelay }) => { if (!pastDelay) return null - if (process.env.NODE_ENV === 'development') { + if (process.env.NODE_ENV !== 'production') { if (isLoading) { return null } @@ -123,6 +123,15 @@ export default function dynamic

( // Support for passing options, eg: dynamic(import('../hello-world'), {loading: () =>

Loading something

}) loadableOptions = { ...loadableOptions, ...options } + const loader = loadableOptions.loader as Loader

+ + // Normalize loader to return the module as form { default: Component } for `React.lazy`. + // Also for backward compatible since next/dynamic allows to resolve a component directly with loader + loadableOptions.loader = () => + loader().then((mod) => { + return { default: mod.default || mod } + }) + // coming from build/babel/plugins/react-loadable-plugin.js if (loadableOptions.loadableGenerated) { loadableOptions = { diff --git a/test/development/basic-basepath/next-dynamic/components/nested2.js b/test/development/basic-basepath/next-dynamic/components/nested2.js index b9b2c982b108a8d..8fe2f1ce0a6842a 100644 --- a/test/development/basic-basepath/next-dynamic/components/nested2.js +++ b/test/development/basic-basepath/next-dynamic/components/nested2.js @@ -1,11 +1,8 @@ import dynamic from 'next/dynamic' -const BrowserLoaded = dynamic( - async () => ({ default: () =>

Browser hydrated
}), - { - ssr: false, - } -) +const BrowserLoaded = dynamic(async () => () =>
Browser hydrated
, { + ssr: false, +}) export default () => (
diff --git a/test/development/basic-basepath/next-dynamic/pages/dynamic/head.js b/test/development/basic-basepath/next-dynamic/pages/dynamic/head.js index 3d1535a164eb577..4fe4224787a6426 100644 --- a/test/development/basic-basepath/next-dynamic/pages/dynamic/head.js +++ b/test/development/basic-basepath/next-dynamic/pages/dynamic/head.js @@ -3,27 +3,25 @@ import Head from 'next/head' const Test = dynamic({ loader: async () => { - // component module - return { - default: () => { - return ( -
- -