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
- Verify the entry path exists: ls <entry>.
- Check for typos in the entry filename or extension.
- Ensure you are running parcel from the correct working directory.
- If the entry is generated by a prior build step, run that step first.
- 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
- Verify entry paths exist before running parcel, especially in CI scripts.
- Use absolute paths or paths relative to a known root in build scripts.
- Add a prebuild existence check for programmatically-generated entry paths.
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
- ${path.relative(process.cwd(), source)} does not exist.
- ${path.relative(process.cwd(), source)} is not a file.
- Could not find entry: ${entry}
- A Parcel link could not be found!
- Only one spread parameter can be included in a config pipeli
AI-assisted analysis of parcel-bundler/parcel@59484858a1 (2026-08-13).
Data as JSON: /api/errors/8f5d276a2ad5be68.
Report an issue: GitHub.