-
Notifications
You must be signed in to change notification settings - Fork 27.3k
Commit
Fixes #74062 (`jotai` ran into this error [when they added `"type": "commonjs"` to their package.json](pmndrs/jotai#2579 (reply in thread))) > this is a bug in the transform we do when a `'use client'` directive is encountered. I think what's happening is that we're creating a virtual file that uses ESM import/export syntax, but it's called proxy.js (not proxy.mjs), so the `"type": "commonjs" `makes turbopack "correctly" upset at the ESM syntax. #74062 (comment) The (slightly kludgy) solution is to use `proxy.mjs` or `proxy.cjs` to force the module format, bypassing the issue where `proxy.js` changes meaning depending on `package.json#type`.
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import * as React from 'react' | ||
|
||
import EsmFromCjs from 'lib-cjs' | ||
|
||
export default function Page() { | ||
return ( | ||
<p> | ||
lib-cjs: <EsmFromCjs /> | ||
</p> | ||
) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import * as React from 'react' | ||
|
||
import EsmFromEsm from 'lib-esm' | ||
|
||
export default function Page() { | ||
return ( | ||
<p> | ||
lib-esm: <EsmFromEsm /> | ||
</p> | ||
) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import { ReactNode } from 'react' | ||
export default function Root({ children }: { children: ReactNode }) { | ||
return ( | ||
<html> | ||
<body>{children}</body> | ||
</html> | ||
) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import * as React from 'react' | ||
|
||
const CjsFromCjs = require('lib-cjs') | ||
|
||
export default function Page() { | ||
return ( | ||
<p> | ||
lib-cjs: <CjsFromCjs /> | ||
</p> | ||
) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import * as React from 'react' | ||
|
||
const CjsFromEsm = require('lib-esm') | ||
|
||
export default function Page() { | ||
return ( | ||
<p> | ||
lib-esm: <CjsFromEsm /> | ||
</p> | ||
) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import { nextTestSetup } from 'e2e-utils' | ||
|
||
describe('esm-client-module-without-exports', () => { | ||
const { next } = nextTestSetup({ | ||
files: __dirname, | ||
}) | ||
|
||
describe('"type": "commonjs" in package.json', () => { | ||
it('should render without errors: import cjs', async () => { | ||
const $ = await next.render$('/import-cjs') | ||
expect($('p').text()).toContain('lib-cjs: esm') | ||
}) | ||
|
||
it('should render without errors: require cjs', async () => { | ||
const $ = await next.render$('/require-cjs') | ||
expect($('p').text()).toContain('lib-cjs: cjs') | ||
}) | ||
}) | ||
|
||
describe('"type": "module" in package.json', () => { | ||
it('should render without errors: import esm', async () => { | ||
const $ = await next.render$('/import-esm') | ||
expect($('p').text()).toContain('lib-esm: esm') | ||
}) | ||
|
||
it('should render without errors: require esm', async () => { | ||
const $ = await next.render$('/require-esm') | ||
expect($('p').text()).toContain('lib-esm: cjs') | ||
}) | ||
}) | ||
}) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
/** | ||
* @type {import('next').NextConfig} | ||
*/ | ||
const nextConfig = {} | ||
|
||
module.exports = nextConfig |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.