Turbopack does not resolve serverExternalPackages
CHC383 opened this issue · 1 comments
Link to the code that reproduces this issue
https://github.com/CHC383/nextjs-nextlogger-config-bug-example/tree/turbopack-bug
To Reproduce
Start the application in dev mode (npm run dev
) and check the console output
Current vs. Expected behavior
- Current behavior:
Error: An error occurred while loading instrumentation hook: Cannot find module as expression is too dynamic
- Expected behavior: The application could start and load the next-logger config
Provide environment information
Operating System:
Platform: darwin
Arch: arm64
Version: Darwin Kernel Version 23.5.0: Wed May 1 20:12:58 PDT 2024; root:xnu-10063.121.3~5/RELEASE_ARM64_T6000
Available memory (MB): 32768
Available CPU cores: 8
Binaries:
Node: 21.6.2
npm: 10.2.4
Yarn: 1.22.21
pnpm: 8.14.3
Relevant Packages:
next: 14.3.0-canary.63 // Latest available version is detected (14.3.0-canary.63).
eslint-config-next: N/A
react: 18.2.0
react-dom: 18.2.0
typescript: 5.1.3
Next.js Config:
output: N/A
Which area(s) are affected? (Select all that apply)
Module Resolution, Turbopack
Which stage(s) are affected? (Select all that apply)
next dev (local)
Additional context
Original issue of loading next-logger
since 14.2 is describe here: #64802. After finding out a workaround to add next-logger
to experimental.serverComponentsExternalPackages
(14.2) or serverExternalPackages (14.3), the module was able to be included and loaded by Webpack, but Turbopack doesn't work.
- To reproduce the error: Run
npm run dev
- To see the results of Webpack: Remove
--turbo
inpackage.json
and runnpm run dev
Full error log:
❯ npm run dev
> dev
> next dev --turbo
▲ Next.js 14.3.0-canary.63 (turbo)
- Local: http://localhost:3000
- Experiments (use with caution):
· instrumentationHook
✓ Starting...
Error: An error occurred while loading instrumentation hook: Cannot find module as expression is too dynamic
at /Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:5595:19
at module.exports.[project]/node_modules/import-fresh/index.js [instrumentation] (ecmascript).module.exports (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:5598:7)
at loadJsSync (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:4897:12)
at #loadConfiguration (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:5208:24)
at #readConfiguration (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:5195:74)
at search (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:5166:63)
at emplace (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:4746:20)
at ExplorerSync.search (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:5189:42)
at Object.<anonymous> (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:10105:30)
at [project]/node_modules/next-logger/lib/logger.js [instrumentation] (ecmascript) (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:10121:3)
at instantiateModule (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:520:23)
at getOrInstantiateModuleFromParent (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:572:12)
at commonJsRequire (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:136:20)
at Object.<anonymous> (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:10125:16)
at [project]/node_modules/next-logger/lib/patches/next.js [instrumentation] (ecmascript) (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:10155:3)
at instantiateModule (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:520:23)
at getOrInstantiateModuleFromParent (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:572:12)
at commonJsRequire (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:136:20)
at Object.<anonymous> (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:10191:1)
at [project]/node_modules/next-logger/presets/all.js [instrumentation] (ecmascript) (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:10194:3)
at instantiateModule (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:520:23)
at getOrInstantiateModuleFromParent (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:572:12)
at commonJsRequire (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:136:20)
at Object.<anonymous> (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:10197:1)
at [project]/node_modules/next-logger/index.js [instrumentation] (ecmascript) (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/node_modules_595211._.js:10199:3)
at instantiateModule (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:520:23)
at getOrInstantiateModuleFromParent (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:572:12)
at commonJsRequire (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/[turbopack]_runtime.js:136:20)
at Module.register (/Users/xxxx/workspaces/next-logger-bug-example/.next/server/chunks/instrumentation_ts_ca8ae5._.js:13:15)
at async DevServer.runInstrumentationHookIfAvailable (/Users/xxxx/workspaces/next-logger-bug-example/node_modules/next/dist/server/dev/next-dev-server.js:437:17)
at async Span.traceAsyncFn (/Users/xxxx/workspaces/next-logger-bug-example/node_modules/next/dist/trace/trace.js:157:20)
at async DevServer.prepareImpl (/Users/xxxx/workspaces/next-logger-bug-example/node_modules/next/dist/server/dev/next-dev-server.js:214:9)
at async NextServer.prepare (/Users/xxxx/workspaces/next-logger-bug-example/node_modules/next/dist/server/next.js:161:13)
at async initializeImpl (/Users/xxxx/workspaces/next-logger-bug-example/node_modules/next/dist/server/lib/render-server.js:98:5)
at async initialize (/Users/xxxx/workspaces/next-logger-bug-example/node_modules/next/dist/server/lib/router-server.js:424:22)
at async Server.<anonymous> (/Users/xxxx/workspaces/next-logger-bug-example/node_modules/next/dist/server/lib/start-server.js:250:36) {
code: 'MODULE_NOT_FOUND',
filepath: '/Users/xxxx/workspaces/next-logger-bug-example/next-logger.config.cjs'
}
This is not due to serverExternalPackages
config. next-logger
internally have some dynamic cjs require to workaround node.js module cache, and it's form is currently not analyzable by turbopack's resolution
delete require.cache[filePath]; // Delete module from cache
const parent = require.cache[parentPath];
return parent === undefined ? require(filePath) : parent.require(filePath);