{"record":{"id":"33e6d5263e6c751d","repo":"remotion-dev/remotion","slug":"the-bundler-completed-without-emitting-noreactinternals","errorCode":null,"errorMessage":"The bundler completed without emitting ${NoReactInternals.bundleName}.","messagePattern":"The bundler completed without emitting (.+?)\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"packages/bundler/src/bundle.ts","lineNumber":372,"sourceCode":"\t\ttry {\n\t\t\tawait runWebpack();\n\t\t} catch (err) {\n\t\t\tif (looksLikeCacheCorruption(err) && actualArgs.enableCaching !== false) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'Webpack cache appears to be corrupted. Clearing cache and retrying...',\n\t\t\t\t);\n\t\t\t\tawait clearCache(resolvedRemotionRoot, 'production');\n\t\t\t\tawait runWebpack();\n\t\t\t} else {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst bundleOutput = path.join(outDir, NoReactInternals.bundleName);\n\tif (!fs.existsSync(bundleOutput)) {\n\t\tthrow new Error(\n\t\t\t`The bundler completed without emitting ${NoReactInternals.bundleName}.`,\n\t\t);\n\t}\n\n\tconst publicPath = getBundlePublicPath(actualArgs.publicPath);\n\tconst staticHash = getBundleStaticHash(publicPath);\n\n\tconst from = options?.publicDir\n\t\t? path.resolve(resolvedRemotionRoot, options.publicDir)\n\t\t: path.join(resolvedRemotionRoot, 'public');\n\tconst to = path.join(outDir, 'public');\n\n\tlet symlinkWarningShown = false;\n\tconst showSymlinkWarning = (ent: fs.Dirent, src: string) => {\n\t\tif (symlinkWarningShown) {\n\t\t\treturn;\n\t\t}\n","sourceCodeStart":354,"sourceCodeEnd":390,"githubUrl":"https://github.com/remotion-dev/remotion/blob/46a3a6bf13ca367376ff18bbb06dae2e87e0d068/packages/bundler/src/bundle.ts#L354-L390","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nConfig.overrideWebpackConfig((c) => ({...c, output: {...c.output, path: 'custom-dist'}}))\n// after\nConfig.overrideWebpackConfig((c) => ({...c})) // leave output path to Remotion","handlingStrategy":"try-catch","validationCode":"// after bundling, check output yourself\nconst out = path.join(outDir, 'bundle.js');\nif (!fs.existsSync(out)) inspectWebpackStats();","typeGuard":null,"tryCatchPattern":"try {\n  await bundle(...);\n} catch (e) {\n  if (String(e).includes('without emitting')) {\n    // inspect webpackOverride, disk space, outDir contents\n  }\n}","preventionTips":["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."],"tags":["bundler","webpack","build"],"backgroundTag":"file-not-found","analyzedSha":"46a3a6bf13ca367376ff18bbb06dae2e87e0d068","analyzedAt":"2026-09-18T00:12:20.256Z","contentChangedAt":"2026-09-18T00:12:20.256Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}