{"id":"134b22b3698f1efd","repo":"vitejs/vite","slug":"vitejs-plugin-legacy-does-not-support-library-mod","errorCode":null,"errorMessage":"@vitejs/plugin-legacy does not support library mode.","messagePattern":"@vitejs/plugin-legacy does not support library mode\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/plugin-legacy/src/index.ts","lineNumber":462,"sourceCode":"          'es2015',\n        )\n      }\n    },\n  }\n\n  const legacyPostPlugin: Plugin = {\n    name: 'vite:legacy-post-process',\n    enforce: 'post',\n    apply: 'build',\n\n    renderStart(opts) {\n      // Empty the nested map for this output\n      outputToChunkFileNameToPolyfills.set(opts, null)\n    },\n\n    configResolved(_config) {\n      if (_config.build.lib) {\n        throw new Error('@vitejs/plugin-legacy does not support library mode.')\n      }\n      config = _config\n\n      const viteVersion = this.meta.viteVersion\n      supportsLegacyOxcMinification =\n        !!viteVersion &&\n        isVersionGte(viteVersion, legacyOxcMinificationSupportedVersion)\n\n      if (!supportsLegacyOxcMinification && config.build.minify === 'oxc') {\n        config.logger.warn(\n          colors.yellow(\n            `'oxc' minifier is not supported for legacy chunks by Vite version ${viteVersion}. ` +\n              `Please upgrade to Vite version ${legacyOxcMinificationSupportedVersion} or later.`,\n          ),\n        )\n      }\n\n      if (isDebug) {","sourceCodeStart":444,"sourceCodeEnd":480,"githubUrl":"https://github.com/vitejs/vite/blob/89620f09afcfef6b35e7bb8660132ab5b4d0cd3b/packages/plugin-legacy/src/index.ts#L444-L480","documentation":"Thrown in configResolved when config.build.lib is truthy. plugin-legacy works by injecting <script> tags into HTML entry files and generating dual modern/legacy bundles tied to HTML entries. Library mode (build.lib) produces JS/CSS consumable by other bundlers, not HTML, so plugin-legacy's entire HTML-centric pipeline is incompatible. This is a hard, by-design limitation.","triggerScenarios":"Configuring build.lib in vite.config (e.g., { build: { lib: { entry: 'src/lib.ts', formats: ['es'] } } }) while simultaneously including the legacy plugin in the plugins array.","commonSituations":"A developer building a component library or SDK wants to support legacy browsers and adds @vitejs/plugin-legacy, not realizing it only works for app builds (HTML entries). Common when migrating an app to a library build without removing the plugin.","solutions":["Remove @vitejs/plugin-legacy from plugins when using build.lib; instead configure build.target to legacy browsers directly (e.g., build.target: 'es2015').","If you need both a library build and a legacy app build, use separate vite configs or conditional plugin inclusion: `...(isLibBuild ? [] : [legacy()])`.","For library consumers needing legacy support, have consumers add plugin-legacy in their own app build rather than in the library build."],"exampleFix":"// before\nplugins: [legacy()],\nbuild: { lib: { entry: 'src/lib.ts', name: 'MyLib' } }\n// after\nplugins: [],\nbuild: {\n  lib: { entry: 'src/lib.ts', name: 'MyLib' },\n  target: 'es2015' // transpile for older browsers directly\n}","handlingStrategy":"validation","validationCode":"// Check for library mode before adding the plugin\nfunction getPlugins(config) {\n  const plugins = []\n  if (!config.build?.lib) {\n    plugins.push(legacy())\n  } else {\n    console.warn('plugin-legacy skipped: library mode is not supported')\n  }\n  return plugins\n}","typeGuard":"function isLibraryMode(config: UserConfig): boolean {\n  return !!(config.build?.lib)\n}\n\n// usage\nconst plugins = isLibraryMode(config)\n  ? []\n  : [legacy()]","tryCatchPattern":"try {\n  if (config.build?.lib) {\n    throw new Error('Cannot use plugin-legacy with build.lib')\n  }\n} catch (e) {\n  console.warn(e.message, '— omitting plugin-legacy')\n}","preventionTips":["Conditionally include plugin-legacy only for app builds, not library builds.","Use separate vite config files for lib vs app builds (e.g., vite.config.lib.ts).","Add a pre-build check script that validates config compatibility."],"tags":["plugin-legacy","library-mode","config","incompatible"],"analyzedSha":"89620f09afcfef6b35e7bb8660132ab5b4d0cd3b","analyzedAt":"2026-08-03T19:28:02.920Z","schemaVersion":2}