vercel/next.js · error

Failed to read file contents of ${filename}.

Error message

Failed to read file contents of ${filename}.

What it means

Thrown by `getSourceMapFromFile` in packages/next/src/server/dev/get-source-map-from-file.ts:35 when `fs.readFile(filename, 'utf-8')` rejects. The original error is attached via the `cause` option. This utility is used by the dev server to fetch original source for stack traces/overlays; a missing or unreadable file surfaces here.

Source

Thrown at packages/next/src/server/dev/get-source-map-from-file.ts:35

  if (!(match && match[1])) {
    return null
  }
  return match[1].toString()
}

export async function getSourceMapFromFile(
  filename: string
): Promise<RawSourceMap | undefined> {
  filename = filename.startsWith('file://')
    ? url.fileURLToPath(filename)
    : filename

  let fileContents: string

  try {
    fileContents = await fs.readFile(filename, 'utf-8')
  } catch (error) {
    throw new Error(`Failed to read file contents of ${filename}.`, {
      cause: error,
    })
  }

  const sourceUrl = getSourceMapUrl(fileContents)

  if (!sourceUrl) {
    return undefined
  }

  if (sourceUrl.startsWith('data:')) {
    let buffer: dataUriToBuffer.MimeBuffer

    try {
      buffer = dataUriToBuffer(sourceUrl)
    } catch (error) {
      throw new Error(`Failed to parse source map URL for ${filename}.`, {
        cause: error,

View on GitHub (pinned to 0ae8c72462)

Solutions

  1. Verify the file at the reported path exists and is readable.
  2. Clear the `.next` build directory and restart the dev server to regenerate fresh source maps.
  3. If the path is a `file://` URL, confirm the underlying file is present on disk.
  4. Check container/CI filesystem permissions for the project directory.

Example fix

rm -rf .next && pnpm --filter=next dev
Defensive patterns

Strategy: try-catch

Validate before calling

import { access } from 'fs/promises';
async function fileReadable(p: string) {
  try { await access(p); return true; } catch { return false; }
}
if (!(await fileReadable(filename))) { /* skip or warn */ }

Type guard

async function exists(p: string): Promise<boolean> {
  try { await access(p); return true; } catch { return false; }
}

Try / catch

try {
  const map = await getSourceMapFromFile(filename);
} catch (err) {
  // err.cause holds the original fs error; degrade gracefully
  console.warn(`source map unavailable for ${filename}:`, (err as Error).cause);
}

Prevention

When it happens

Trigger: The `filename` points to a file that does not exist, has been deleted, lacks read permissions, or is a directory; a `file://` URL that resolves to a non-existent path (the function converts `file://` via `url.fileURLToPath` first).

Common situations: Source files referenced by a source map that were removed during a rebuild; stale `.next` build cache pointing at deleted modules; permission issues in containerized builds; race between file deletion and dev-server overlay reading it.

Related errors


AI-assisted analysis of vercel/next.js@0ae8c72462 (2026-08-06). Data as JSON: /api/errors/fec13d547b2453fe. Report an issue: GitHub.