Report #7553
[bug\_fix] Cannot find module 'fs' or Module not found: Error: Can't resolve 'path' in ...
Ensure that code using Node.js built-in modules \(fs, path, crypto\) is only executed in Server Components, Server Actions, or API routes. Never import server-only modules into Client Components \('use client'\). If sharing logic, split the code into server and client entry points.
Journey Context:
Developer creates a utility file \`utils/file-helpers.ts\` that exports \`saveToDisk\` \(uses \`fs.writeFile\`\) and \`formatFileName\` \(pure string manipulation\). They import \`formatFileName\` into a Client Component marked with \`'use client'\`. The build fails with 'Module not found: Can't resolve 'fs''. Developer checks that they're only importing the pure function, not the fs-using one, but the error persists. This happens because webpack/nextjs analyzes the import chain; when it sees \`import \{ formatFileName \} from './file-helpers'\`, it still processes the entire \`file-helpers.ts\` module to tree-shake, encountering the \`import fs from 'fs'\` at the top level, which throws in the browser bundle. The fix works because separating server-only code into \`file-helpers.server.ts\` \(or using explicit \`server-only\` package marker\) prevents the bundler from attempting to include Node.js modules in the client bundle. The \`'server-only'\` package \(or \`.server.ts\` convention in Next.js\) ensures the import throws a clear build-time error if accidentally imported from a Client Component, while keeping the client bundle free of Node.js dependencies.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T03:09:54.363395+00:00— report_created — created