remotion-dev/remotion · critical
The bundler completed without emitting
Error message
The bundler completed without emitting ${NoReactInternals.bundleName}. What it means
After webpack finishes bundling, bundle.ts verifies that the expected bundle file (bundle.js per NoReactInternals.bundleName) exists in the output directory. If the bundler reports success but the file is absent, something is deeply wrong with the build output (wrong outDir, output config, or a silent bundler failure). This is a post-build invariant check.
Solutions
- Check webpackOverride for changes to output.path/filename and remove conflicting overrides.
- Inspect the outDir contents and webpack stats for silent failures or errors.
- Ensure sufficient disk space and that no external process deletes dist/ during bundling.
- Verify the Remotion version matches the bundler config expectations.
Example fix
// before
Config.overrideWebpackConfig((c) => ({...c, output: {...c.output, path: 'custom-dist'}}))
// after
Config.overrideWebpackConfig((c) => ({...c})) // leave output path to Remotion Defensive patterns
Strategy: try-catch
Validate before calling
// after bundling, check output yourself const out = path.join(outDir, 'bundle.js'); if (!fs.existsSync(out)) inspectWebpackStats();
Try / catch
try {
await bundle(...);
} catch (e) {
if (String(e).includes('without emitting')) {
// inspect webpackOverride, disk space, outDir contents
}
} Prevention
- Keep webpackOverride free of output.path/filename changes.
- Monitor disk space in CI.
- Don't delete dist/ during a build.
- Pin Remotion versions across the toolchain.
When it happens
Trigger: webpack compilation succeeded but wrote output to a different directory than outDir (custom webpackOverride/output config); antivirus/cleanup removed the file; disk full; custom build overriding filename.
Common situations: Custom webpackOverride changing output.path or filename; plugins that clean the output dir mid-build; running in restricted CI environments; remotion bundle with heavily customized config.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- Browser Studio vendor entry was not generated
- Browser Studio vendor entry was not generated
- bundle() no longer supports the legacy positional…
- bundle() was called without arguments
- bundle() was called without the `entryPoint` option
AI-assisted analysis of remotion-dev/remotion@46a3a6bf13 (2026-09-18).
Data as JSON: /api/errors/33e6d5263e6c751d.
Report an issue: GitHub.
Appendix: source
Thrown at packages/bundler/src/bundle.ts:372
try {
await runWebpack();
} catch (err) {
if (looksLikeCacheCorruption(err) && actualArgs.enableCaching !== false) {
// eslint-disable-next-line no-console
console.warn(
'Webpack cache appears to be corrupted. Clearing cache and retrying...',
);
await clearCache(resolvedRemotionRoot, 'production');
await runWebpack();
} else {
throw err;
}
}
}
const bundleOutput = path.join(outDir, NoReactInternals.bundleName);
if (!fs.existsSync(bundleOutput)) {
throw new Error(
`The bundler completed without emitting ${NoReactInternals.bundleName}.`,
);
}
const publicPath = getBundlePublicPath(actualArgs.publicPath);
const staticHash = getBundleStaticHash(publicPath);
const from = options?.publicDir
? path.resolve(resolvedRemotionRoot, options.publicDir)
: path.join(resolvedRemotionRoot, 'public');
const to = path.join(outDir, 'public');
let symlinkWarningShown = false;
const showSymlinkWarning = (ent: fs.Dirent, src: string) => {
if (symlinkWarningShown) {
return;
}
View on GitHub (pinned to 46a3a6bf13)