next.js
next.js copied to clipboard
Build error "Cannot get final name for export '<export_name>'" when using server actions a certain way
Link to the code that reproduces this issue
https://github.com/mkreuzmayr/next-server-action-bug-repro/
To Reproduce
Run pnpm build
to reproduce the following error
> next build
▲ Next.js 14.0.4
Failed to compile.
./src/server/auth/keycloak.ts + 8 modules
Cannot get final name for export 'sha256' of ./node_modules/.pnpm/[email protected]/node_modules/oslo/dist/crypto/index.js
> Build failed because of webpack errors
Creating an optimized production build . ELIFECYCLE Command failed with exit code 1.
Explanation:
The file src/server/auth/keycloak.ts
is imported in through src/server/auth/index.ts
into the server action src/server/actions/test.ts
.
I am unsure how and why this happens but there are two unrelated things I found you can do to make the error go away.
- Add a second page/route where the server action
src/server/actions/test.ts
is imported. Removing the trailing underscore fromapp/test2/_page.tsx
makes the error go away. - Commenting out the export on line 7 in
src/server/auth/index.ts
also makes the error go away.
Current vs. Expected behavior
Building the next app raises an error when it should actually build the app as normal.
Verify canary release
- [X] I verified that the issue exists in the latest Next.js canary release
Provide environment information
Operating System:
Platform: win32
Arch: x64
Version: Windows 11 Pro
Binaries:
Node: 20.10.0
npm: N/A
Yarn: N/A
pnpm: N/A
Relevant Packages:
next: 14.0.5-canary.65
eslint-config-next: N/A
react: 18.2.0
react-dom: 18.2.0
typescript: 5.3.3
Next.js Config:
output: N/A
Which area(s) are affected? (Select all that apply)
Module resolution (CJS / ESM, module resolving)
Which stage(s) are affected? (Select all that apply)
next build (local)
Additional context
The bug still exists on 14.0.5-canary.65
maybe related to #58756
Seems to occur when importing certain (?) packages (for me, it was heroicons) into a component that was using useRef
but not "use client"
. Adding "use client";
to those components resolved the build error
@skve You mean that this is an additional way to reproduce right? Because I am not using any imported client components from a package in my example. It would help if you could create a reproduction repo of this too.
I'm experiencing a similar error:
./node_modules/.pnpm/@[email protected]/node_modules/@aws-crypto/sha256-js/build/module/index.js + 12 modules Cannot get final name for export 'fromUtf8' of ./node_modules/.pnpm/@[email protected]/node_modules/@smithy/util-utf8/dist-es/index.js
I'm importing a server action in a client component. Everything marked as use server/client appropriately. When I remove this block from my server action, the build succeeds.
try {
await runWithAmplifyServerContext({
nextServerContext: { cookies },
operation: (contextSpec) => fetchUserAttributes(contextSpec),
})
} catch (error) {
console.error(error)
redirect('/login')
}
This code is recommended by AWS Amplify in a SSR environment.
Related: https://github.com/aws-amplify/amplify-js/issues/12856
Same issue here with jimp
Same issue as @gavacq. Its coming after adding AWS Amplify in SSR. Any resolution ?
This is what worked for me: https://www.sanity.media/p/65a2421194f7a8782500f775-how-i-fixed-aws-crypto-build-error still a weird issue, looking for a better solution
Edit: The build error is gone but now I am getting this error while calling the fetchAuthSession method
Attempted to get the Amplify Server Context that may have been destroyed.
Ultimately its not working as expected, did anyone find a solution for this ?
For me, this issue occurred because of a circular dependency issue using barrel files. Once I changed my import from the index.ts (barrel file) to the actual file - the issue resolved.
I ran into the same issue, i was importing some utils. but read up on this in the docs...The arguments and return value of Server Actions must be serializable by React. See the React docs for a list of serializable arguments and values
@gavacq's method of switching to require()
fix this issue for me the second time I had it. Iirc the first time I just removed the library.
Perhaps there is a logging error that would help us provide more data? The issue seems related to project structure so duplicating that may be tough otherwise.
For me, this happened when importing a turborepo package into a server action.
For me, this happened when importing a turborepo package into a server action.
There might be something here. For me it's happening when importing NX packages. I'm also having a bizarre issue where at runtime the server action suddenly can't find the function: https://github.com/vercel/next.js/discussions/63591
Overall, it feels like we just need more transparency into what is happening in the server action build process. As edge case build issues seem to be at the root of all of these server action issues.
I've found a solution here worked for me: https://github.com/vercel/next.js/issues/59344#issuecomment-1846128759
adding the package into next.config.js :
experimental: { serverComponentsExternalPackages: [ '@aws-amplify/adapter-nextjs', 'aws-amplify' ] }
I've found a solution here worked for me: #59344 (comment) adding the package into next.config.js :
experimental: { serverComponentsExternalPackages: [ '@aws-amplify/adapter-nextjs', 'aws-amplify' ] }
The goat
I've found a solution here worked for me: #59344 (comment) adding the package into next.config.js :
experimental: { serverComponentsExternalPackages: [ '@aws-amplify/adapter-nextjs', 'aws-amplify' ] }
helped much!
In my case it was only needed to put the aws-amplify
in the serverComponentsExternalPackages
array.
Does anyone have this error with the openai package? ./utils/helpers.ts + 196 modules Cannot get final name for export 'FormDataEncoder' of ./node_modules/openai/node_modules/form-data-encoder/lib/esm/index.js
experimental: { serverComponentsExternalPackages: [ '@aws-amplify/adapter-nextjs', 'aws-amplify' ] }
doesnt fix it for me
Does anyone have this error with the openai package? ./utils/helpers.ts + 196 modules Cannot get final name for export 'FormDataEncoder' of ./node_modules/openai/node_modules/form-data-encoder/lib/esm/index.js
experimental: { serverComponentsExternalPackages: [ '@aws-amplify/adapter-nextjs', 'aws-amplify' ] }
doesnt fix it for me
I had the same issue with openai (via langchain). Adding experimental: {serverComponentsExternalPackages: ['langchain','@langchain/openai',],},
fixed my issue.
I'm guessing experimental: { serverComponentsExternalPackages: [ 'openai' ] }
will do what you want.
Thank you @harryhaibojiang!
I got a similar error and I'm able to reproduce this. Please check my repo https://github.com/tanapoln/nextjs-build-error
Still don't know how to fix it.
It's working for me with Next 15.0.0-canary.25+, so waiting for a stable version.
@Alex01d Thanks for the info! I just checked and it is also working with 14.3.0-canary.46
.
Thank you for all the workarounds, I am closing this for now.
Hi @Alex01d when you say it's working, you meant it worked without specifying the serverComponentsExternalPackages
in next.config.js
? Thanks in advance!
Hi @Alex01d when you say it's working, you meant it worked without specifying the
serverComponentsExternalPackages
innext.config.js
? Thanks in advance!
For me it is working without specifying it in serverComponentsExternalPackages
.
Hi @Alex01d when you say it's working, you meant it worked without specifying the
serverComponentsExternalPackages
innext.config.js
? Thanks in advance!
I had this issue with 2 imports: 'jose' and 'next/navigation'. serverComponentsExternalPackages
is working with 'jose' even in v14.2, but 'next/navigation' isn't. Both are working in v15 without serverComponentsExternalPackages
.
This closed issue has been automatically locked because it had no new activity for 2 weeks. If you are running into a similar issue, please create a new issue with the steps to reproduce. Thank you.