{"record":{"id":"56b39acc6958162d","repo":"parcel-bundler/parcel","slug":"more-than-one-target-is-not-supported-in-serve-mod","errorCode":null,"errorMessage":"More than one target is not supported in serve mode","messagePattern":"More than one target is not supported in serve mode","errorType":"exception","errorClass":"ThrowableDiagnostic","httpStatus":null,"severity":"error","filePath":"packages/core/core/src/requests/TargetRequest.js","lineNumber":340,"sourceCode":"            }\n\n            return target;\n          })\n          .filter(\n            target => !skipTarget(target.name, exclusiveTarget, target.source),\n          );\n      }\n\n      let serve = this.options.serveOptions;\n      if (\n        serve &&\n        targets.length > 0 &&\n        targets.every(t => BROWSER_ENVS.has(t.env.context))\n      ) {\n        // In serve mode, we only support a single browser target. If the user\n        // provided more than one, or the matching target is not a browser, throw.\n        if (targets.length > 1) {\n          throw new ThrowableDiagnostic({\n            diagnostic: {\n              message: `More than one target is not supported in serve mode`,\n              origin: '@parcel/core',\n            },\n          });\n        }\n        targets[0].distDir = toProjectPath(\n          this.options.projectRoot,\n          serve.distDir,\n        );\n      }\n    } else {\n      targets = Array.from(packageTargets.values())\n        .filter(Boolean)\n        .filter(descriptor => {\n          return (\n            descriptor &&\n            !skipTarget(descriptor.name, exclusiveTarget, descriptor.source)","sourceCodeStart":322,"sourceCodeEnd":358,"githubUrl":"https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/TargetRequest.js#L322-L358","documentation":"Thrown by TargetRequest.resolve() when serve mode (parcel serve / serveOptions) is active and more than one browser-context target is resolved. Serve mode is designed for a single browser target (dev server), so multiple browser targets are rejected. Non-browser targets (node, electron) are allowed alongside serve mode since they don't conflict with the browser serving.","triggerScenarios":"After targets are resolved, if this.options.serveOptions is truthy, targets.length > 0, and every target's env.context is in BROWSER_ENVS, then targets.length > 1 triggers the error. The check only fires when all targets are browser-type.","commonSituations":"Running parcel serve with package.json that defines multiple browser targets; passing multiple targets via --target that are all browser context; using serve mode with a default config that resolves to multiple browser targets; migrating from build mode to serve mode without consolidating targets.","solutions":["Use parcel build instead of parcel serve if you need multiple browser targets — serve mode is for single-target dev serving.","Reduce to a single browser target for serve mode: pass --target <name> to select one.","If you have mixed browser and node targets, the error only fires when ALL are browser — but serve mode still serves only one; consolidate.","In package.json, separate dev targets (single browser) from build targets (multiple)."],"exampleFix":"// before — package.json\n{\n  \"targets\": {\n    \"modern\": { \"context\": \"browser\", \"distDir\": \"dist/modern\" },\n    \"legacy\":  { \"context\": \"browser\", \"distDir\": \"dist/legacy\" }\n  }\n}\n// CLI: parcel serve src/index.html  // ERROR: 2 browser targets\n\n// after — select one for serve\nparcel serve --target modern src/index.html\n// or use build for both\nparcel build src/index.html","handlingStrategy":"validation","validationCode":"function validateServeModeSingleBrowserTarget(targets, serveOptions) {\n  if (!serveOptions) return;\n  const BROWSER_ENVS = new Set(['browser', 'web-worker', 'service-worker', 'worklet']);\n  const browserTargets = targets.filter(t => BROWSER_ENVS.has(t.env?.context));\n  if (browserTargets.length > 1) {\n    throw new Error(`Serve mode requires exactly one browser target; found ${browserTargets.length}: ${browserTargets.map(t => t.name).join(', ')}`);\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use parcel build (not serve) when you need multiple browser targets.","For dev serving, select a single target with --target <name>.","Structure package.json so dev and production targets are clearly separated."],"tags":["targets","serve-mode","dev-server","config","browser"],"backgroundTag":null,"analyzedSha":"59484858a1a0bcbb71f74088956bb437a2db6505","analyzedAt":"2026-08-13T04:06:35.925Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}