diff --git a/packages/angular_devkit/build_angular/src/builders/application/execute-build.ts b/packages/angular_devkit/build_angular/src/builders/application/execute-build.ts index e8e9801938c7..25391649f751 100644 --- a/packages/angular_devkit/build_angular/src/builders/application/execute-build.ts +++ b/packages/angular_devkit/build_angular/src/builders/application/execute-build.ts @@ -125,7 +125,16 @@ export async function executeBuild( new BundlerContext( workspaceRoot, !!options.watch, - createServerCodeBundleOptions(options, nodeTargets, codeBundleCache), + createServerCodeBundleOptions( + { + ...options, + // Disable external deps for server bundles. + // This is because it breaks Vite 'optimizeDeps' for SSR. + externalPackages: false, + }, + nodeTargets, + codeBundleCache, + ), () => false, ), ); diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/vite-server.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/vite-server.ts index be73b9abd44e..72ecf241a406 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/vite-server.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/vite-server.ts @@ -224,7 +224,7 @@ export async function* serveWithVite( server = await createServer(serverConfiguration); await server.listen(); - if (browserOptions.ssr) { + if (serverConfiguration.ssr?.optimizeDeps?.disabled === false) { /** * Vite will only start dependency optimization of SSR modules when the first request comes in. * In some cases, this causes a long waiting time. To mitigate this, we call `ssrLoadModule` to @@ -451,8 +451,19 @@ export async function setupServer( // Exclude any Node.js built in module and provided dependencies (currently build defined externals) external: serverExplicitExternal, optimizeDeps: getDepOptimizationConfig({ + /** + * ********************************************* + * NOTE: Temporary disable 'optimizeDeps' for SSR. + * ********************************************* + * + * Currently this causes a number of issues. + * - Deps are re-optimized everytime the server is started. + * - Added deps after a rebuild are not optimized. + * - Breaks RxJs (Unless it is added as external). See: https://github.com/angular/angular-cli/issues/26235 + */ + // Only enable with caching since it causes prebundle dependencies to be cached - disabled: !serverOptions.cacheOptions.enabled, + disabled: true, // !serverOptions.cacheOptions.enabled, // Exclude any explicitly defined dependencies (currently build defined externals and node.js built-ins) exclude: serverExplicitExternal, // Include all implict dependencies from the external packages internal option