parcel-bundler/parcel · error · ThrowableDiagnostic

Entry ${entry} does not exist

Error message

Entry ${entry} does not exist

What it means

Thrown by resolveEntry() when this.options.inputFS.stat(entry) rejects and the entry string is not a glob pattern. This is the top-level entry resolution failure — the entry passed on the CLI or in options does not exist and cannot be expanded as a glob.

Source

Thrown at packages/core/core/src/requests/EntryRequest.js:166

      },
    });
  }
}

export class EntryResolver {
  options: ParcelOptions;

  constructor(options: ParcelOptions) {
    this.options = options;
  }

  async resolveEntry(entry: FilePath): Promise<EntryRequestResult> {
    let stat;
    try {
      stat = await this.options.inputFS.stat(entry);
    } catch (err) {
      if (!isGlob(entry)) {
        throw new ThrowableDiagnostic({
          diagnostic: {
            message: md`Entry ${entry} does not exist`,
          },
        });
      }
      let files = await glob(entry, this.options.inputFS, {
        absolute: true,
        onlyFiles: false,
      });
      let results = await Promise.all(
        files.map(f => this.resolveEntry(path.normalize(f))),
      );
      return results.reduce(
        (p, res) => ({
          entries: p.entries.concat(res.entries),
          files: p.files.concat(res.files),
          globs: p.globs.concat(res.globs),
        }),

View on GitHub (pinned to 59484858a1)

Solutions

  1. Verify the entry path exists: ls <entry>.
  2. Check for typos in the entry filename or extension.
  3. Ensure you are running parcel from the correct working directory.
  4. If the entry is generated by a prior build step, run that step first.
  5. Use a glob pattern (e.g., 'src/*.html') if you want Parcel to expand multiple possible entries.

Example fix

// before
parcel src/indx.html

// after
parcel src/index.html
Defensive patterns

Strategy: validation

Validate before calling

const fs = require('fs');
function validateEntryExists(entry) {
  if (!fs.existsSync(entry)) {
    throw new Error(`Entry does not exist: ${entry}`);
  }
}

Prevention

When it happens

Trigger: Called at the start of resolveEntry(entry). The stat() call for the literal entry path throws (ENOENT) and isGlob(entry) returns false, so the glob-expansion fallback is skipped and the error is thrown immediately.

Common situations: Typing a wrong entry path on the CLI (e.g., parcel src/indx.html); pointing at a file that was deleted or never committed; wrong working directory when running the parcel command; entry path has a typo or wrong extension.

Related errors


AI-assisted analysis of parcel-bundler/parcel@59484858a1 (2026-08-13). Data as JSON: /api/errors/8f5d276a2ad5be68. Report an issue: GitHub.