Environment
- nf3: latest (via nitro)
- Nitro: latest (via nuxt)
- Nuxt: 4.4.2
- Package Manager: bun 1.3.9
- OS: Linux (GitHub Actions runner)
Reproduction
- Clone https://github.com/hackclub/aegis
- Go to the package.json and edit the build script to just
nuxt build
- Try to run the build on GitHub actions or use the provided Dockerfile
Describe the bug
When building a Nuxt app that depends on vue and @vue/server-renderer (which have mutual peer dependencies), nf3's hoisting logic creates circular symlinks in .output/server/node_modules, resulting in an ELOOP: too many symbolic links encountered error on some build systems (this appears to happen on my Coolify server and GitHub Actions
The symlink chain looks like:
.output/server/node_modules/@vue/server-renderer/node_modules/vue
→ .nf3/vue@X.Y.Z
.output/server/node_modules/vue/node_modules/@vue/server-renderer
→ .nf3/@vue/server-renderer@X.Y.Z
Since vue at the top level is itself symlinked to .nf3/vue@X.Y.Z, any tool that follows symlinks (like Vercel's deployment scanner or scandir) enters an infinite loop:
@vue/server-renderer → vue → @vue/server-renderer → vue → ...
Note that I used Claude Opus to help describe the error, as this is largely unknown territory for me.
Additional context
No response
Logs
[success] [@nuxt/fonts] Fonts downloaded and cached.
[success] [nitro] Generated public .output/public
[info] [nitro] Building Nuxt Nitro server (preset: `node-server`, compatibility date: `2025-07-15`)
[success] [nitro] Nuxt Nitro server built
[Error: ELOOP: too many symbolic links encountered, scandir '/home/runner/work/aegis/aegis/.output/server/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules'] {
errno: -40,
code: 'ELOOP',
syscall: 'scandir',
path: '/home/runner/work/aegis/aegis/.output/server/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules/vue/node_modules/@vue/server-renderer/node_modules'
}
error: script "build" exited with code 1
Error: Process completed with exit code 1.
Context: https://github.com/hackclub/aegis/actions/runs/23695583158/job/69030241137?pr=8
Environment
Reproduction
nuxt buildDescribe the bug
When building a Nuxt app that depends on
vueand@vue/server-renderer(which have mutual peer dependencies),nf3's hoisting logic creates circular symlinks in.output/server/node_modules, resulting in anELOOP: too many symbolic links encounterederror on some build systems (this appears to happen on my Coolify server and GitHub ActionsThe symlink chain looks like:
Since
vueat the top level is itself symlinked to.nf3/vue@X.Y.Z, any tool that follows symlinks (like Vercel's deployment scanner orscandir) enters an infinite loop:Note that I used Claude Opus to help describe the error, as this is largely unknown territory for me.
Additional context
No response
Logs