diff --git a/packages/next/taskfile-swc.js b/packages/next/taskfile-swc.js index 71f79fc86477..45e985cb7cc6 100644 --- a/packages/next/taskfile-swc.js +++ b/packages/next/taskfile-swc.js @@ -118,6 +118,7 @@ module.exports = function (task) { if (interopClientDefaultExport) { output.code += ` if (typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) { + Object.defineProperty(exports.default, '__esModule', { value: true }); Object.assign(exports.default, exports); module.exports = exports.default; } diff --git a/test/unit/esm-interpolate/esm-interpolate.test.tsx b/test/unit/esm-interpolate/esm-interpolate.test.tsx new file mode 100644 index 000000000000..c6ffb8137582 --- /dev/null +++ b/test/unit/esm-interpolate/esm-interpolate.test.tsx @@ -0,0 +1,14 @@ +import React from 'react' +import { renderToString } from 'react-dom/server' +import * as nextRouter from 'next/router' + +import { Foo } from './fixture' + +// @ts-expect-error +jest.spyOn(nextRouter, 'useRouter').mockReturnValue({ + pathname: 'Hello', +}) + +test('mock the interpolated modules should work', () => { + expect(renderToString()).toBe(`
Hello
`) +}) diff --git a/test/unit/esm-interpolate/fixture.tsx b/test/unit/esm-interpolate/fixture.tsx new file mode 100644 index 000000000000..90485c11e409 --- /dev/null +++ b/test/unit/esm-interpolate/fixture.tsx @@ -0,0 +1,8 @@ +import React from 'react' +import { useRouter } from 'next/router' + +export const Foo = () => { + const router = useRouter() + + return
{router.pathname}
+}