next.js icon indicating copy to clipboard operation
next.js copied to clipboard

Build error "Cannot get final name for export '<export_name>'" when using server actions a certain way

Open mkreuzmayr opened this issue 1 year ago • 2 comments

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.

  1. Add a second page/route where the server action src/server/actions/test.ts is imported. Removing the trailing underscore from app/test2/_page.tsx makes the error go away.
  2. 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

mkreuzmayr avatar Jan 18 '24 08:01 mkreuzmayr

maybe related to #58756

mkreuzmayr avatar Jan 18 '24 08:01 mkreuzmayr

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 avatar Feb 01 '24 21:02 skve

@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.

mkreuzmayr avatar Feb 02 '24 09:02 mkreuzmayr

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

gavacq avatar Feb 07 '24 22:02 gavacq

Same issue here with jimp

jelling avatar Feb 19 '24 20:02 jelling

Same issue as @gavacq. Its coming after adding AWS Amplify in SSR. Any resolution ?

bhaveshabuild avatar Feb 22 '24 20:02 bhaveshabuild

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.

bhaveshabuild avatar Feb 22 '24 20:02 bhaveshabuild

Ultimately its not working as expected, did anyone find a solution for this ?

bhaveshabuild avatar Feb 22 '24 21:02 bhaveshabuild

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.

bestickley avatar Feb 27 '24 11:02 bestickley

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

kaggwe-marvin avatar Mar 15 '24 12:03 kaggwe-marvin

@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.

jelling avatar Mar 21 '24 00:03 jelling

For me, this happened when importing a turborepo package into a server action.

MaximilianSchon avatar Mar 22 '24 17:03 MaximilianSchon

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.

jelling avatar Mar 23 '24 14:03 jelling

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' ] }

harryhaibojiang avatar Mar 23 '24 20:03 harryhaibojiang

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

paluchi avatar Apr 19 '24 19:04 paluchi

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.

pedroSoaresll avatar Apr 21 '24 02:04 pedroSoaresll

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

chriszlr avatar Apr 30 '24 10:04 chriszlr

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!

adambarito avatar Apr 30 '24 20:04 adambarito

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.

tanapoln avatar May 27 '24 16:05 tanapoln

It's working for me with Next 15.0.0-canary.25+, so waiting for a stable version.

Alex01d avatar Jun 12 '24 12:06 Alex01d

@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.

mkreuzmayr avatar Jun 17 '24 06:06 mkreuzmayr

Hi @Alex01d when you say it's working, you meant it worked without specifying the serverComponentsExternalPackages in next.config.js? Thanks in advance!

HuiSF avatar Jun 18 '24 03:06 HuiSF

Hi @Alex01d when you say it's working, you meant it worked without specifying the serverComponentsExternalPackages in next.config.js? Thanks in advance!

For me it is working without specifying it in serverComponentsExternalPackages.

mkreuzmayr avatar Jun 18 '24 05:06 mkreuzmayr

Hi @Alex01d when you say it's working, you meant it worked without specifying the serverComponentsExternalPackages in next.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.

Alex01d avatar Jun 18 '24 09:06 Alex01d

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.

github-actions[bot] avatar Jul 03 '24 00:07 github-actions[bot]