{"record":{"id":"c8c881de3e9f1d1d","repo":"angular/angular-cli","slug":"rendering-failed-with-numerrors-worker-errors","errorCode":null,"errorMessage":"Rendering failed with ${numErrors} worker errors.","messagePattern":"Rendering failed with (.+?) worker errors\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/angular_devkit/build_angular/src/builders/prerender/index.ts","lineNumber":236,"sourceCode":"              minifyCss: !!normalizedStylesOptimization.minify,\n              outputPath,\n              route: route[0] === '/' ? route : '/' + route,\n              serverBundlePath,\n            };\n\n            return worker.run(options);\n          }),\n        )) as RenderResult[];\n        let numErrors = 0;\n        for (const { errors, warnings } of results) {\n          spinner.stop();\n          errors?.forEach((e) => context.logger.error(e));\n          warnings?.forEach((e) => context.logger.warn(e));\n          spinner.start();\n          numErrors += errors?.length ?? 0;\n        }\n        if (numErrors > 0) {\n          throw Error(`Rendering failed with ${numErrors} worker errors.`);\n        }\n      } catch (error) {\n        spinner.fail(`Prerendering routes to ${outputPath} failed.`);\n        assertIsError(error);\n\n        return { success: false, error: error.message };\n      }\n      spinner.succeed(`Prerendering routes to ${outputPath} complete.`);\n\n      if (browserOptions.serviceWorker) {\n        spinner.start('Generating service worker...');\n        try {\n          await augmentAppWithServiceWorker(\n            projectRoot,\n            context.workspaceRoot,\n            outputPath,\n            browserOptions.baseHref || '/',\n            browserOptions.ngswConfigPath,","sourceCodeStart":218,"sourceCodeEnd":254,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/angular_devkit/build_angular/src/builders/prerender/index.ts#L218-L254","documentation":"During Angular prerendering (SSG), @angular-devkit/build-angular's _renderUniversal counts errors reported by the rendering worker pool and throws this Error when numErrors > 0, aborting the prerender builder run. Each worker error is also logged via context.logger.error just before the throw.","triggerScenarios":"One or more routes throw during server-side rendering in the worker processes — runtime errors in components, missing browser globals referenced at SSR time, failed HTTP/data calls inside route resolvers or constructors, or template/runtime errors only manifesting during prerender of specific routes.","commonSituations":"Code using window/document/localStorage without isPlatformBrowser guards; HTTP requests to relative URLs during prerender; routes with invalid parameters; a recently changed component throwing on the server only.","solutions":["Read the individual worker error lines logged above the failure to find the failing route(s) and fix the underlying SSR error.","Guard browser-only APIs with isPlatformBrowser() checks in afterNextRender or platform checks.","Make HTTP calls use absolute URLs (or an interceptor providing the origin) during SSR.","Reproduce locally with `ng run <project>:prerender` and render the failing route in isolation.","Temporarily exclude the problematic route (prerender routes config) to unblock the build while fixing."],"exampleFix":"// before\nconstructor() {\n  localStorage.setItem('lastVisit', Date.now().toString()); // throws in prerender worker\n}\n// after\nconstructor() {\n  afterNextRender(() => localStorage.setItem('lastVisit', Date.now().toString()));\n}","handlingStrategy":"try-catch","validationCode":"// run prerender in CI gate\nng run my-app:prerender || (echo 'Fix logged worker errors above'; exit 1)","typeGuard":null,"tryCatchPattern":"try {\n  await executePrerender();\n} catch (err) {\n  if (!(err instanceof Error && err.message.startsWith('Rendering failed with'))) throw err;\n  // inspect the logged worker errors, fix SSR code, rerun\n  return { success: false, error: err.message };\n}","preventionTips":["Guard all window/document/localStorage usage with isPlatformBrowser or afterNextRender.","Use absolute URLs for HTTP calls during SSR.","Test `ng run app:prerender` locally before CI.","Keep route resolver code SSR-safe.","Read the per-route worker error logs above the failure message."],"tags":["prerender","ssg","ssr","build","angular"],"backgroundTag":"ssr-prerender-worker-error","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T08:17:16.595Z"}