{"record":{"id":"528c3b9c96e89ead","repo":"angular/angular-cli","slug":"webpack-dev-server-configuration-was-not-set","errorCode":null,"errorMessage":"Webpack Dev Server configuration was not set.","messagePattern":"Webpack Dev Server configuration was not set\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/angular_devkit/build_angular/src/builders/dev-server/webpack-server.ts","lineNumber":131,"sourceCode":"      logger.error(tags.stripIndents`\n        ****************************************************************************************\n        This is a simple server for use in testing or debugging Angular applications locally.\n        It hasn't been reviewed for security issues.\n\n        DON'T USE IT FOR PRODUCTION!\n        ****************************************************************************************\n      `);\n    }\n\n    const { config, i18n } = await generateI18nBrowserWebpackConfigFromContext(\n      browserOptions,\n      context,\n      (wco) => [getDevServerConfig(wco), getCommonConfig(wco), getStylesConfig(wco)],\n      options,\n    );\n\n    if (!config.devServer) {\n      throw new Error('Webpack Dev Server configuration was not set.');\n    }\n\n    let locale: string | undefined;\n    if (i18n.shouldInline) {\n      // Dev-server only supports one locale\n      locale = [...i18n.inlineLocales][0];\n    } else if (i18n.hasDefinedSourceLocale) {\n      // use source locale if not localizing\n      locale = i18n.sourceLocale;\n    }\n\n    let webpackConfig = config;\n\n    // If a locale is defined, setup localization\n    if (locale) {\n      if (i18n.inlineLocales.size > 1) {\n        throw new Error(\n          'The development server only supports localizing a single locale per build.',","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/angular_devkit/build_angular/src/builders/dev-server/webpack-server.ts#L113-L149","documentation":"After generating the webpack configuration via generateWebpackConfig (combining dev-server, common, and styles configs), setup() asserts that a devServer section exists. A missing devServer config means the generated config is structurally wrong (e.g. wrong mode/optimization resolution), so the server cannot be started and the builder throws.","triggerScenarios":"generateWebpackConfig returns a config without a devServer property — typically due to corrupted or unsupported angular.json dev-server options (e.g. malformed 'buildTarget'/'browserTarget', invalid options merged through), a customization/patch of the dev-server config generation, or an incompatible @angular-devkit/build-angular / webpack-dev-server version combination.","commonSituations":"Hand-edited angular.json with invalid dev-server option types; monkey-patched generateWebpackConfig or custom builder extensions that drop devServer; version mismatch after upgrading webpack-dev-server (v3 vs v4 API changes) breaking config generation; calling setup() directly in custom builders with a mis-built config.","solutions":["Restore clean dev-server options in angular.json (regenerate the target or compare against a fresh project) and re-run.","Reinstall/align @angular-devkit/build-angular and webpack-dev-server versions (delete node_modules and lockfile, reinstall).","If custom code overrides config generation, ensure it spreads/keeps config.devServer instead of replacing the config.","Run the stock 'ng serve' without custom builders/patches to isolate the source."],"exampleFix":"// before (custom override)\nwebpackConfig = { ...webpackConfig, devServer: undefined };\n// after\nwebpackConfig = { ...webpackConfig, devServer: { ...webpackConfig.devServer, port } };","handlingStrategy":"validation","validationCode":"function assertDevServerConfig(config: { devServer?: unknown }): asserts config is { devServer: object } {\n  if (!config.devServer) {\n    throw new Error('Generated webpack config has no devServer section; check angular.json dev-server options and versions.');\n  }\n}","typeGuard":"const hasDevServer = (config: { devServer?: unknown }): config is { devServer: NonNullable<typeof config.devServer> } =>\n  config.devServer != null;","tryCatchPattern":"try {\n  await ngServe();\n} catch (e) {\n  if (String(e.message).includes('Webpack Dev Server configuration was not set')) {\n    // reset angular.json dev-server target options / reinstall aligned versions\n  }\n  throw e;\n}","preventionTips":["Keep dev-server target options in angular.json valid and minimal","Reinstall node_modules with a consistent lockfile after upgrades","Avoid patching generateWebpackConfig or internal builder modules","Verify 'ng serve' works on a fresh project before layering customizations"],"tags":["angular","dev-server","webpack","configuration"],"backgroundTag":"dev-server-config-missing","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}