Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix client boundary inheritance for barrel optimization #64467

Merged
merged 4 commits into from Apr 14, 2024

Conversation

huozhi
Copy link
Member

@huozhi huozhi commented Apr 14, 2024

What

Inherit the client boudaries from the found matched target in load barrel

Why

The root cause with the barrel transform, we missed the client boundary directive during the transform.
Since the new version of mui's case looks like this:

Import path
page.js (server module) -> <module>/index.js (shared module) -> <module/subpath>/index.js (client module) -> `<module/subpath/sub-module.js> (client module)

After our transform, we lost the "use client" which causes the mismatch of the transform:

In rsc layer: the file pointing to the sub module entry (<module/subpath>/index.js), but without the client boundary.

Fixes #64369
Closes NEXT-3101

@ijjk
Copy link
Member

ijjk commented Apr 14, 2024

Failing test suites

Commit: 708ec7f

TURBOPACK=1 pnpm test test/integration/create-next-app/templates/app.test.ts (turbopack)

  • create-next-app --app (App Router) > should create JavaScript project with --js flag
  • create-next-app --app (App Router) > should create TypeScript project with --ts flag
  • create-next-app --app (App Router) > should create project inside "src" directory with --src-dir flag
  • create-next-app --app (App Router) > should create TailwindCSS project with --tailwind flag
Expand output

● create-next-app --app (App Router) › should create JavaScript project with --js flag

FetchError: request to http://localhost:40699/ failed, reason: connect ECONNREFUSED 127.0.0.1:40699

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● create-next-app --app (App Router) › should create TypeScript project with --ts flag

FetchError: request to http://localhost:37677/ failed, reason: connect ECONNREFUSED 127.0.0.1:37677

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● create-next-app --app (App Router) › should create project inside "src" directory with --src-dir flag

FetchError: request to http://localhost:36413/ failed, reason: connect ECONNREFUSED 127.0.0.1:36413

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● create-next-app --app (App Router) › should create TailwindCSS project with --tailwind flag

FetchError: request to http://localhost:33059/ failed, reason: connect ECONNREFUSED 127.0.0.1:33059

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

Read more about building and testing Next.js in contributing.md.

TURBOPACK=1 pnpm test test/integration/create-next-app/templates/pages.test.ts (turbopack)

  • create-next-app --no-app (Pages Router) > should create JavaScript project with --js flag
  • create-next-app --no-app (Pages Router) > should create TypeScript project with --ts flag
  • create-next-app --no-app (Pages Router) > should create project inside "src" directory with --src-dir flag
  • create-next-app --no-app (Pages Router) > should create TailwindCSS project with --tailwind flag
Expand output

● create-next-app --no-app (Pages Router) › should create JavaScript project with --js flag

FetchError: request to http://localhost:40993/ failed, reason: connect ECONNREFUSED 127.0.0.1:40993

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● create-next-app --no-app (Pages Router) › should create TypeScript project with --ts flag

FetchError: request to http://localhost:43103/ failed, reason: connect ECONNREFUSED 127.0.0.1:43103

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● create-next-app --no-app (Pages Router) › should create project inside "src" directory with --src-dir flag

FetchError: request to http://localhost:41685/ failed, reason: connect ECONNREFUSED 127.0.0.1:41685

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● create-next-app --no-app (Pages Router) › should create TailwindCSS project with --tailwind flag

FetchError: request to http://localhost:36993/ failed, reason: connect ECONNREFUSED 127.0.0.1:36993

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

Read more about building and testing Next.js in contributing.md.

@ijjk
Copy link
Member

ijjk commented Apr 14, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js fix/barrel-optimization-inherit Change
buildDuration 14.4s 14.5s ⚠️ +109ms
buildDurationCached 8.9s 6.7s N/A
nodeModulesSize 199 MB 199 MB ⚠️ +852 B
nextStartRea..uration (ms) 405ms 385ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js fix/barrel-optimization-inherit Change
2453-HASH.js gzip 31.4 kB 31.4 kB N/A
3304.HASH.js gzip 181 B 181 B
3f784ff6-HASH.js gzip 53.7 kB 53.7 kB
8299-HASH.js gzip 5.1 kB 5.1 kB N/A
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 242 B 240 B N/A
main-HASH.js gzip 32.2 kB 32.2 kB N/A
webpack-HASH.js gzip 1.68 kB 1.68 kB N/A
Overall change 99 kB 99 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js fix/barrel-optimization-inherit Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary vercel/next.js fix/barrel-optimization-inherit Change
_app-HASH.js gzip 196 B 197 B N/A
_error-HASH.js gzip 184 B 184 B
amp-HASH.js gzip 505 B 505 B
css-HASH.js gzip 324 B 325 B N/A
dynamic-HASH.js gzip 2.5 kB 2.5 kB N/A
edge-ssr-HASH.js gzip 258 B 258 B
head-HASH.js gzip 352 B 352 B
hooks-HASH.js gzip 370 B 371 B N/A
image-HASH.js gzip 4.27 kB 4.27 kB
index-HASH.js gzip 259 B 259 B
link-HASH.js gzip 2.67 kB 2.67 kB N/A
routerDirect..HASH.js gzip 314 B 312 B N/A
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 309 B 309 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 6.63 kB 6.63 kB
Client Build Manifests
vercel/next.js canary vercel/next.js fix/barrel-optimization-inherit Change
_buildManifest.js gzip 483 B 485 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js fix/barrel-optimization-inherit Change
index.html gzip 530 B 529 B N/A
link.html gzip 541 B 541 B
withRouter.html gzip 525 B 523 B N/A
Overall change 541 B 541 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js fix/barrel-optimization-inherit Change
edge-ssr.js gzip 95.6 kB 95.6 kB N/A
page.js gzip 3.06 kB 3.06 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js fix/barrel-optimization-inherit Change
middleware-b..fest.js gzip 624 B 623 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 25.5 kB 25.5 kB N/A
edge-runtime..pack.js gzip 839 B 839 B
Overall change 839 B 839 B
Next Runtimes
vercel/next.js canary vercel/next.js fix/barrel-optimization-inherit Change
app-page-exp...dev.js gzip 171 kB 171 kB
app-page-exp..prod.js gzip 97.5 kB 97.5 kB
app-page-tur..prod.js gzip 99.2 kB 99.2 kB
app-page-tur..prod.js gzip 93.5 kB 93.5 kB
app-page.run...dev.js gzip 145 kB 145 kB
app-page.run..prod.js gzip 92 kB 92 kB
app-route-ex...dev.js gzip 21.5 kB 21.5 kB
app-route-ex..prod.js gzip 15.2 kB 15.2 kB
app-route-tu..prod.js gzip 15.2 kB 15.2 kB
app-route-tu..prod.js gzip 14.9 kB 14.9 kB
app-route.ru...dev.js gzip 21.1 kB 21.1 kB
app-route.ru..prod.js gzip 14.9 kB 14.9 kB
pages-api-tu..prod.js gzip 9.55 kB 9.55 kB
pages-api.ru...dev.js gzip 9.82 kB 9.82 kB
pages-api.ru..prod.js gzip 9.55 kB 9.55 kB
pages-turbo...prod.js gzip 22.5 kB 22.5 kB
pages.runtim...dev.js gzip 23.1 kB 23.1 kB
pages.runtim..prod.js gzip 22.5 kB 22.5 kB
server.runti..prod.js gzip 51.3 kB 51.3 kB
Overall change 948 kB 948 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js fix/barrel-optimization-inherit Change
0.pack gzip 1.59 MB 1.58 MB N/A
index.pack gzip 106 kB 107 kB ⚠️ +543 B
Overall change 106 kB 107 kB ⚠️ +543 B
Diff details
Diff for middleware.js

Diff too large to display

Commit: 708ec7f

@huozhi huozhi marked this pull request as ready for review April 14, 2024 15:53
@oliviertassinari
Copy link
Contributor

oliviertassinari commented Apr 14, 2024

The commit on Material UI that likely surfaced this problem: mui/material-ui#40663. It was released in Material UI v5.15.7.

@huozhi
Copy link
Member Author

huozhi commented Apr 14, 2024

Thank you @oliviertassinari to address this on mui side! I added a new test for this specific case to avoid regression in the future in 0e8fffe

@oliviertassinari
Copy link
Contributor

@huozhi awesome, thanks for the fix.

@huozhi huozhi merged commit cb8fb32 into canary Apr 14, 2024
73 of 80 checks passed
@huozhi huozhi deleted the fix/barrel-optimization-inherit branch April 14, 2024 21:36
huozhi added a commit that referenced this pull request Apr 15, 2024
ztanner pushed a commit that referenced this pull request Apr 17, 2024
### What

Inherit the client boudaries from the found matched target in load
barrel

### Why
The root cause with the barrel transform, we missed the client boundary
directive during the transform.
Since the new version of mui's case looks like this:

Import path
page.js (server module) -> `<module>/index.js` (shared module) ->
`<module/subpath>/index.js` (client module) ->
`<module/subpath/sub-module.js> (client module)

After our transform, we lost the `"use client"` which causes the
mismatch of the transform:

In `rsc` layer: the file pointing to the sub module entry
(`<module/subpath>/index.js`), but without the client boundary.


Fixes #64369 
Closes NEXT-3101
@huozhi
Copy link
Member Author

huozhi commented Apr 17, 2024

@oliviertassinari Do you have an ETA that will release this in a patch?

@oliviertassinari
Copy link
Contributor

oliviertassinari commented Apr 18, 2024

Do you have an ETA that will release this in a patch?

@huozhi The PR I linked in #64467 (comment) is what I believe surfaced this bug (it's a step for Material UI toward exporting server components). The last stable release of Material UI is v5.15.15 which was 16 days ago. I see two options:

cc @DiegoAndai

@huozhi
Copy link
Member Author

huozhi commented Apr 19, 2024

There're still a few files need to tackle such as the barrel files in mui/material, e.g. mui-material/src/Container/index.js.

The issue is that when you use "use client" with export *, we can't analyze properly about the used exports atm, so that lead to the errors user reported. I already fixed in #64681 and leave more explanation there. We can wait for the next patch release of Next.js to solve it but the bundle will still include more unused stuffs which is not ideal. So just wanna flag that would be better to remove more client directives in mui and only apply them to the component where we need.

@DiegoAndai
Copy link

DiegoAndai commented Apr 19, 2024

Hey! (by sheer coincidence) we opened a PR yesterday to remove all ""use client" with export *" occurrences, which would land in v6 alpha. We could consider cherry-picking it to v5.

I rephrase @oliviertassinari's question: is the next Next.js stable release scheduled to be in >4 weeks? And will that include #64681? With this info we could plan our next steps on the MUI side.

@huozhi
Copy link
Member Author

huozhi commented Apr 19, 2024

I'm unsure about when we could do the release yet, but certain that it will include that fix.

@oliviertassinari
Copy link
Contributor

oliviertassinari commented Apr 19, 2024

The issue is that when you use "use client" with export *, we can't analyze properly about the used exports atm

@huozhi I'm confused by this one. Is this a client/server bundle issue, a tree-shaking issue, or something else? I can blame the error:

Error: It's currently unsupported to use "export *" in a client boundary. Please use named exports instead.

with #46171 as the origin of when the error message was added.

atm we cannot statically analyze all the exports from this the boundary, unless we can apply barrel file optimization for every import which could slow down speed.

#64681. So I guess it's why it was working before .

When we found the mixing client entry module like that, we treat it as a CJS client module and include all the bundle in client like before what we have the client components import optimization.

This seems to be OK, what's the downside of doing this?

@huozhi
Copy link
Member Author

huozhi commented Apr 20, 2024

It's a tree-shaking issue, it will work properly once the fix on canary is out on stable release. I mean if we want to get best optimization for v5, it's good to remove the "use client" in barrel file where it contains export *. It doesn't effect much mostly the subpath import cases like import Container from '@mui/material/Container/Container'.

@SirFrey
Copy link

SirFrey commented Apr 21, 2024

It's a tree-shaking issue, it will work properly once the fix on canary is out on stable release. I mean if we want to get best optimization for v5, it's good to remove the "use client" in barrel file where it contains export *. It doesn't effect much mostly the subpath import cases like import Container from '@mui/material/Container/Container'.

I'm going to be checking the news canary versions, because I'm facing the same the MUI's issues but in my website when I build to next@14.2.* (latest versions of canary doesn't seems to work)

 Γ£ô Collecting page data
   Generating static pages (1/5)  [=== ]Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:61599)
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:61546)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64546)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64825)
    at nB (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:67538)
    at nD (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:66680)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64853)
    at nB (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:67538)
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:58560)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64546) {
  digest: '2921082285'
}

Error occurred prerendering page "/en". Read more: https://nextjs.org/docs/messages/prerender-error

Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:61599)
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:61546)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64546)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64825)
    at nB (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:67538)
    at nD (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:66680)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64853)
    at nB (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:67538)
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:58560)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64546)
Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:61599)
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:61546)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64546)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64825)
    at nB (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:67538)
    at nD (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:66680)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64853)
    at nB (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:67538)
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:58560)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64546) {
  digest: '2921082285'
}

Error occurred prerendering page "/es". Read more: https://nextjs.org/docs/messages/prerender-error

Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:61599)
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:61546)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64546)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64825)
    at nB (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:67538)
    at nD (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:66680)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64853)
    at nB (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:67538)
    at nM (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:58560)
    at nN (/home/moises/projects/Portfolio/node_modules/.pnpm/next@14.2.0_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js:12:64546)
 Γ£ô Generating static pages (5/5)

> Export encountered errors on following paths:
        /[lang]/page: /en
        /[lang]/page: /es

Could it be worth to submit an issue about this? (knowing that you already cover those problems with MUI)

@huozhi
Copy link
Member Author

huozhi commented Apr 22, 2024

@SirFrey please submit a new issue with reproduction 🙏

huozhi added a commit that referenced this pull request Apr 23, 2024
### What

* Remove the change added in #64467, but still kept tests.
* Add more tests for mixed imports (component and function) from shared
component with `optimizePackageImports`

### Why

The fix in #64467 was not correct, as mixing `export *` with `"use
client"` should error if Next.js detect it properly.
When there's mixed exports, that a shared function will become a client
reference if the target file inherits the client boundary.

The original issue #64467 fixed was actually related to tree-shaking,
which is fixed in #64681.

Closes NEXT-3197
huozhi added a commit that referenced this pull request Apr 23, 2024
### What

* Remove the change added in #64467, but still kept tests.
* Add more tests for mixed imports (component and function) from shared
component with `optimizePackageImports`

### Why

The fix in #64467 was not correct, as mixing `export *` with `"use
client"` should error if Next.js detect it properly.
When there's mixed exports, that a shared function will become a client
reference if the target file inherits the client boundary.

The original issue #64467 fixed was actually related to tree-shaking,
which is fixed in #64681.

Closes NEXT-3197
@SirFrey
Copy link

SirFrey commented Apr 23, 2024

@huozhi The error is fixed in next@14.3.0-canary19, thank you for the attention <3
I guess that the error was the same as MUI with the import my repo.
btw when does this version is going to be released as stable?

@huozhi
Copy link
Member Author

huozhi commented Apr 24, 2024

@SirFrey The proper fix is published in 14.2.3, please upgrade to the new version

@SirFrey
Copy link

SirFrey commented Apr 24, 2024

@huozhi Updated and working 😄 !!!

@vercel vercel locked as resolved and limited conversation to collaborators Apr 24, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

v14.2 causing build error for Material UI
7 participants