Plugin `transformIndexHtml` called with a `*.html` id that's `import`ed and not an entrypoint during `vite build`.
Issue Details
Describe the bug
I expect transformIndexHtml
to be called only with entrypoints .html
files, and it is like so during vite dev
. But during vite build
, other .html
that is not an entrypoint.
Reproduction
https://stackblitz.com/edit/vitejs-vite-bqwee1at?file=vite.config.js
Steps to reproduce
Run npm install
followed by npm run dev
.
Only the entrypoint
index.html
printed to the console.
Run npm run build
.
Non-entrypoints
.html
printed to the console.
System Info
System: OS: Linux 5.0 undefined CPU: (8) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz Memory: 0 Bytes / 0 Bytes Shell: 1.0 - /bin/jsh Binaries: Node: 20.19.1 - /usr/local/bin/node Yarn: 1.22.19 - /usr/local/bin/yarn npm: 10.8.2 - /usr/local/bin/npm pnpm: 8.15.6 - /usr/local/bin/pnpm npmPackages: vite: ^7.0.0 => 7.0.0
Used Package Manager
npm
Logs
Click to expand!
vite:config config file loaded in 2253.71ms +0ms vite:env loading env files: [ vite:env '/home/projects/vitejs-vite-bqwee1at/.env', vite:env '/home/projects/vitejs-vite-bqwee1at/.env.local', vite:env '/home/projects/vitejs-vite-bqwee1at/.env.production', vite:env '/home/projects/vitejs-vite-bqwee1at/.env.production.local' vite:env ] +0ms vite:env env files loaded in 8.78ms +8ms vite:env using resolved env: {} +2ms vite:config using resolved config: { vite:config plugins: [ vite:config 'vite:build-metadata', vite:config 'vite:watch-package-data', vite:config 'alias', vite:config 'vite:modulepreload-polyfill', vite:config 'vite:resolve', vite:config 'vite:html-inline-proxy', vite:config 'vite:css', vite:config 'vite:esbuild', vite:config 'vite:json', vite:config 'vite:wasm-helper', vite:config 'vite:worker', vite:config 'vite:asset', vite:config 'foo', vite:config 'vite:wasm-fallback', vite:config 'vite:define', vite:config 'vite:css-post', vite:config 'vite:build-html', vite:config 'vite:worker-import-meta-url', vite:config 'vite:asset-import-meta-url', vite:config 'vite:force-systemjs-wrap-complete', vite:config 'commonjs', vite:config 'vite:data-uri', vite:config 'vite:rollup-options-plugins', vite:config 'vite:dynamic-import-vars', vite:config 'vite:import-glob', vite:config 'vite:build-import-analysis', vite:config 'vite:esbuild-transpile', vite:config 'vite:terser', vite:config 'vite:manifest', vite:config 'vite:ssr-manifest', vite:config 'vite:reporter', vite:config 'vite:load-fallback' vite:config ], vite:config build: { vite:config target: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ], vite:config polyfillModulePreload: true, vite:config modulePreload: { polyfill: true }, vite:config outDir: 'dist', vite:config assetsDir: 'assets', vite:config assetsInlineLimit: 4096, vite:config sourcemap: false, vite:config terserOptions: {}, vite:config rollupOptions: {}, vite:config commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] }, vite:config dynamicImportVarsOptions: { warnOnError: true, exclude: [ /node_modules/ ] }, vite:config write: true, vite:config emptyOutDir: null, vite:config copyPublicDir: true, vite:config manifest: false, vite:config lib: false, vite:config ssrManifest: false, vite:config ssrEmitAssets: false, vite:config reportCompressedSize: true, vite:config chunkSizeWarningLimit: 500, vite:config watch: null, vite:config cssCodeSplit: true, vite:config minify: 'esbuild', vite:config ssr: false, vite:config emitAssets: true, vite:config createEnvironment: [Function: createEnvironment], vite:config cssTarget: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ], vite:config cssMinify: true vite:config }, vite:config environments: { vite:config client: { vite:config define: undefined, vite:config resolve: { vite:config externalConditions: [ 'node' ], vite:config extensions: [ vite:config '.mjs', '.js', vite:config '.mts', '.ts', vite:config '.jsx', '.tsx', vite:config '.json' vite:config ], vite:config dedupe: [], vite:config noExternal: [], vite:config external: [], vite:config preserveSymlinks: false, vite:config alias: [ vite:config { vite:config find: /^\/?@vite\/env/, vite:config replacement: '/@fs/home/projects/vitejs-vite-bqwee1at/node_modules/vite/dist/client/env.mjs' vite:config }, vite:config { vite:config find: /^\/?@vite\/client/, vite:config replacement: '/@fs/home/projects/vitejs-vite-bqwee1at/node_modules/vite/dist/client/client.mjs' vite:config } vite:config ], vite:config mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ], vite:config conditions: [ 'module', 'browser', 'development|production' ], vite:config builtins: [] vite:config }, vite:config keepProcessEnv: false, vite:config consumer: 'client', vite:config optimizeDeps: { vite:config include: [], vite:config exclude: [], vite:config needsInterop: [], vite:config extensions: [], vite:config disabled: undefined, vite:config holdUntilCrawlEnd: true, vite:config force: false, vite:config noDiscovery: false, vite:config esbuildOptions: { preserveSymlinks: false } vite:config }, vite:config dev: { vite:config warmup: [], vite:config sourcemap: { js: true }, vite:config sourcemapIgnoreList: [Function: isInNodeModules], vite:config preTransformRequests: true, vite:config createEnvironment: [Function: defaultCreateClientDevEnvironment], vite:config recoverable: true, vite:config moduleRunnerTransform: false vite:config }, vite:config build: { vite:config target: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ], vite:config polyfillModulePreload: true, vite:config modulePreload: { polyfill: true }, vite:config outDir: 'dist', vite:config assetsDir: 'assets', vite:config assetsInlineLimit: 4096, vite:config sourcemap: false, vite:config terserOptions: {}, vite:config rollupOptions: {}, vite:config commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] }, vite:config dynamicImportVarsOptions: { warnOnError: true, exclude: [ /node_modules/ ] }, vite:config write: true, vite:config emptyOutDir: null, vite:config copyPublicDir: true, vite:config manifest: false, vite:config lib: false, vite:config ssrManifest: false, vite:config ssrEmitAssets: false, vite:config reportCompressedSize: true, vite:config chunkSizeWarningLimit: 500, vite:config watch: null, vite:config cssCodeSplit: true, vite:config minify: 'esbuild', vite:config ssr: false, vite:config emitAssets: true, vite:config createEnvironment: [Function: createEnvironment], vite:config cssTarget: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ], vite:config cssMinify: true vite:config }, vite:config plugins: [ vite:config { vite:config name: 'vite:build-metadata', vite:config renderChunk: [AsyncFunction: renderChunk] vite:config }, vite:config { vite:config name: 'vite:watch-package-data', vite:config buildStart: [Function: buildStart], vite:config buildEnd: [Function: buildEnd], vite:config watchChange: [Function: watchChange] vite:config }, vite:config { vite:config name: 'alias', vite:config buildStart: [AsyncFunction: buildStart], vite:config resolveId: [Function: resolveId] vite:config }, vite:config { vite:config name: 'vite:modulepreload-polyfill', vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [Function: handler] } vite:config }, vite:config { vite:config name: 'vite:resolve', vite:config resolveId: [AsyncFunction: resolveId], vite:config load: { handler: [Function: handler] } vite:config }, vite:config { vite:config name: 'vite:html-inline-proxy', vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [Function: handler] } vite:config }, vite:config { vite:config name: 'vite:css', vite:config buildStart: [Function: buildStart], vite:config buildEnd: [Function: buildEnd], vite:config load: { handler: [AsyncFunction: handler] }, vite:config transform: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:esbuild', vite:config configureServer: [Function: configureServer], vite:config transform: [AsyncFunction: transform] vite:config }, vite:config { vite:config name: 'vite:json', vite:config transform: { handler: [Function: handler] } vite:config }, vite:config { vite:config name: 'vite:wasm-helper', vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:worker', vite:config buildStart: [Function: buildStart], vite:config load: { handler: [AsyncFunction: handler] }, vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule], vite:config transform: { handler: [AsyncFunction: handler] }, vite:config renderChunk: [Function: renderChunk], vite:config generateBundle: [Function: generateBundle] vite:config }, vite:config { vite:config name: 'vite:asset', vite:config perEnvironmentStartEndDuringDev: true, vite:config buildStart: [Function: buildStart], vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [AsyncFunction: handler] }, vite:config renderChunk: [Function: renderChunk], vite:config generateBundle: [Function: generateBundle] vite:config }, vite:config { vite:config name: 'foo', vite:config transformIndexHtml: { order: 'pre', handler: [Function: handler] }, vite:config load: [Function: load] vite:config }, vite:config { vite:config name: 'vite:wasm-fallback', vite:config load: { handler: [Function: handler] } vite:config }, vite:config { vite:config name: 'vite:define', vite:config transform: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:css-post', vite:config renderStart: [Function: renderStart], vite:config transform: { handler: [AsyncFunction: handler] }, vite:config renderChunk: [AsyncFunction: renderChunk], vite:config augmentChunkHash: [Function: augmentChunkHash], vite:config generateBundle: [AsyncFunction: generateBundle] vite:config }, vite:config { vite:config name: 'vite:build-html', vite:config transform: { handler: [AsyncFunction: handler] }, vite:config generateBundle: [AsyncFunction: generateBundle] vite:config }, vite:config { vite:config name: 'vite:worker-import-meta-url', vite:config applyToEnvironment: [Function: applyToEnvironment], vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule], vite:config transform: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:asset-import-meta-url', vite:config applyToEnvironment: [Function: applyToEnvironment], vite:config transform: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:force-systemjs-wrap-complete', vite:config renderChunk: [Function: renderChunk] vite:config }, vite:config { vite:config name: 'commonjs', vite:config version: '28.0.6', vite:config options: [Function: options], vite:config buildStart: [Function: buildStart], vite:config buildEnd: [Function: buildEnd], vite:config load: [AsyncFunction: load], vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule], vite:config transform: [Function: transform] vite:config }, vite:config { vite:config name: 'vite:data-uri', vite:config buildStart: [Function: buildStart], vite:config resolveId: [Function: resolveId], vite:config load: [Function: load] vite:config }, vite:config { vite:config name: 'vite:dynamic-import-vars', vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [Function: handler] }, vite:config transform: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:import-glob', vite:config buildStart: [Function: buildStart], vite:config transform: { handler: [AsyncFunction: handler] }, vite:config hotUpdate: [Function: hotUpdate] vite:config }, vite:config { vite:config name: 'vite:build-import-analysis', vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [Function: handler] }, vite:config transform: { handler: [AsyncFunction: handler] }, vite:config renderChunk: [Function: renderChunk], vite:config generateBundle: [Function: generateBundle] vite:config }, vite:config { vite:config name: 'vite:esbuild-transpile', vite:config applyToEnvironment: [Function: applyToEnvironment], vite:config renderChunk: [AsyncFunction: renderChunk] vite:config }, vite:config { vite:config name: 'vite:terser', vite:config applyToEnvironment: [Function: applyToEnvironment], vite:config renderChunk: [AsyncFunction: renderChunk], vite:config closeBundle: [Function: closeBundle] vite:config }, vite:config { vite:config name: 'vite:reporter', vite:config sharedDuringBuild: true, vite:config perEnvironmentStartEndDuringDev: true, vite:config transform: [Function: transform], vite:config buildStart: [Function: buildStart], vite:config buildEnd: [Function: buildEnd], vite:config renderStart: [Function: renderStart], vite:config renderChunk: [Function: renderChunk], vite:config generateBundle: [Function: generateBundle], vite:config writeBundle: [AsyncFunction: writeBundle] vite:config }, vite:config { vite:config name: 'vite:load-fallback', vite:config load: { handler: [AsyncFunction: handler] } vite:config } vite:config ] vite:config } vite:config }, vite:config resolve: { vite:config externalConditions: [ 'node' ], vite:config extensions: [ vite:config '.mjs', '.js', vite:config '.mts', '.ts', vite:config '.jsx', '.tsx', vite:config '.json' vite:config ], vite:config dedupe: [], vite:config noExternal: [], vite:config external: [], vite:config preserveSymlinks: false, vite:config alias: [ vite:config { vite:config find: /^\/?@vite\/env/, vite:config replacement: '/@fs/home/projects/vitejs-vite-bqwee1at/node_modules/vite/dist/client/env.mjs' vite:config }, vite:config { vite:config find: /^\/?@vite\/client/, vite:config replacement: '/@fs/home/projects/vitejs-vite-bqwee1at/node_modules/vite/dist/client/client.mjs' vite:config } vite:config ], vite:config mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ], vite:config conditions: [ 'module', 'browser', 'development|production' ], vite:config builtins: [] vite:config }, vite:config configFile: '/home/projects/vitejs-vite-bqwee1at/vite.config.js', vite:config configFileDependencies: [ '/home/projects/vitejs-vite-bqwee1at/vite.config.js' ], vite:config inlineConfig: { vite:config root: undefined, vite:config base: undefined, vite:config mode: undefined, vite:config configFile: undefined, vite:config configLoader: undefined, vite:config logLevel: undefined, vite:config clearScreen: undefined, vite:config build: {} vite:config }, vite:config root: '/home/projects/vitejs-vite-bqwee1at', vite:config base: '/', vite:config decodedBase: '/', vite:config rawBase: '/', vite:config publicDir: '/home/projects/vitejs-vite-bqwee1at/public', vite:config cacheDir: '/home/projects/vitejs-vite-bqwee1at/node_modules/.vite', vite:config command: 'build', vite:config mode: 'production', vite:config isWorker: false, vite:config mainConfig: null, vite:config bundleChain: [], vite:config isProduction: true, vite:config css: { vite:config transformer: 'postcss', vite:config preprocessorMaxWorkers: true, vite:config devSourcemap: false vite:config }, vite:config json: { namedExports: true, stringify: 'auto' }, vite:config esbuild: { jsxDev: false }, vite:config server: { vite:config port: 5173, vite:config strictPort: false, vite:config host: undefined, vite:config allowedHosts: [], vite:config https: undefined, vite:config open: false, vite:config proxy: undefined, vite:config cors: { vite:config origin: /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/ vite:config }, vite:config headers: {}, vite:config warmup: { clientFiles: [], ssrFiles: [] }, vite:config middlewareMode: false, vite:config fs: { vite:config strict: true, vite:config deny: [ '.env', '.env.*', '*.{crt,pem}', '**/.git/**' ], vite:config allow: [ '/home/projects/vitejs-vite-bqwee1at' ] vite:config }, vite:config preTransformRequests: true, vite:config perEnvironmentStartEndDuringDev: false, vite:config sourcemapIgnoreList: [Function: isInNodeModules] vite:config }, vite:config builder: undefined, vite:config preview: { vite:config port: 4173, vite:config strictPort: false, vite:config host: undefined, vite:config allowedHosts: [], vite:config https: undefined, vite:config open: false, vite:config proxy: undefined, vite:config cors: { vite:config origin: /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/ vite:config }, vite:config headers: {} vite:config }, vite:config envDir: '/home/projects/vitejs-vite-bqwee1at', vite:config env: { BASE_URL: '/', MODE: 'production', DEV: false, PROD: true }, vite:config assetsInclude: [Function: assetsInclude], vite:config logger: { vite:config hasWarned: false, vite:config info: [Function: info], vite:config warn: [Function: warn], vite:config warnOnce: [Function: warnOnce], vite:config error: [Function: error], vite:config clearScreen: [Function: clearScreen], vite:config hasErrorLogged: [Function: hasErrorLogged] vite:config }, vite:config packageCache: Map(1) { vite:config 'fnpd_/home/projects/vitejs-vite-bqwee1at' => { vite:config dir: '/home/projects/vitejs-vite-bqwee1at', vite:config data: { vite:config name: 'vite-starter', vite:config private: true, vite:config version: '0.0.0', vite:config type: 'module', vite:config scripts: { vite:config dev: 'vite', vite:config build: 'vite build --debug', vite:config preview: 'vite preview' vite:config }, vite:config devDependencies: { vite: '^7.0.0' } vite:config }, vite:config hasSideEffects: [Function: hasSideEffects], vite:config setResolvedCache: [Function: setResolvedCache], vite:config getResolvedCache: [Function: getResolvedCache] vite:config }, vite:config set: [Function (anonymous)] vite:config }, vite:config worker: { format: 'iife', plugins: '() => plugins', rollupOptions: {} }, vite:config appType: 'spa', vite:config experimental: { vite:config importGlobRestoreExtension: false, vite:config renderBuiltUrl: undefined, vite:config hmrPartialAccept: false vite:config }, vite:config future: undefined, vite:config ssr: { vite:config target: 'node', vite:config optimizeDeps: { esbuildOptions: { preserveSymlinks: false } }, vite:config resolve: { conditions: undefined, externalConditions: undefined } vite:config }, vite:config optimizeDeps: { vite:config include: [], vite:config exclude: [], vite:config needsInterop: [], vite:config extensions: [], vite:config disabled: undefined, vite:config holdUntilCrawlEnd: true, vite:config force: false, vite:config noDiscovery: false, vite:config esbuildOptions: { preserveSymlinks: false } vite:config }, vite:config dev: { vite:config warmup: [], vite:config sourcemap: { js: true }, vite:config sourcemapIgnoreList: [Function: isInNodeModules], vite:config preTransformRequests: false, vite:config createEnvironment: [Function: defaultCreateDevEnvironment], vite:config recoverable: false, vite:config moduleRunnerTransform: false vite:config }, vite:config webSocketToken: 'yNF86zYHQFC6', vite:config getSortedPlugins: [Function: getSortedPlugins], vite:config getSortedPluginHooks: [Function: getSortedPluginHooks], vite:config createResolver: [Function: createResolver], vite:config fsDenyGlob: [Function: arrayMatcher], vite:config safeModulePaths: Set(0) {}, vite:config [Symbol(vite:resolved-config)]: true vite:config } +102ms vite v7.0.0 building for production... { entrypoint: '/home/projects/vitejs-vite-bqwee1at/index.html' } transforming (5) src/counter.js{ entrypoint: '/home/projects/vitejs-vite-bqwee1at/src/foo.html' } ✓ 8 modules transformed. dist/src/foo.html 0.03 kB │ gzip: 0.05 kB dist/index.html 0.45 kB │ gzip: 0.29 kB dist/assets/index-CrYBktwj.css 1.20 kB │ gzip: 0.62 kB dist/assets/index-DwXTHeoX.js 2.70 kB │ gzip: 1.45 kB ✓ built in 1.76s
Validations
- Follow our Code of Conduct
- Read the Contributing Guidelines.
- Read the docs.
- Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
- Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to vuejs/core instead.
- Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
- The provided reproduction is a minimal reproducible example of the bug.
Issue Details
Plugin `transformIndexHtml` called with a `*.html` id that's `import`ed and not an entrypoint during `vite build`.
Describe the bug
I expect transformIndexHtml
to be called only with entrypoints .html
files, and it is like so during vite dev
. But during vite build
, other .html
that is not an entrypoint.
Reproduction
https://stackblitz.com/edit/vitejs-vite-bqwee1at?file=vite.config.js
Steps to reproduce
Run npm install
followed by npm run dev
.
Only the entrypoint
index.html
printed to the console.
Run npm run build
.
Non-entrypoints
.html
printed to the console.
System Info
System: OS: Linux 5.0 undefined CPU: (8) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz Memory: 0 Bytes / 0 Bytes Shell: 1.0 - /bin/jsh Binaries: Node: 20.19.1 - /usr/local/bin/node Yarn: 1.22.19 - /usr/local/bin/yarn npm: 10.8.2 - /usr/local/bin/npm pnpm: 8.15.6 - /usr/local/bin/pnpm npmPackages: vite: ^7.0.0 => 7.0.0
Used Package Manager
npm
Logs
Click to expand!
vite:config config file loaded in 2253.71ms +0ms vite:env loading env files: [ vite:env '/home/projects/vitejs-vite-bqwee1at/.env', vite:env '/home/projects/vitejs-vite-bqwee1at/.env.local', vite:env '/home/projects/vitejs-vite-bqwee1at/.env.production', vite:env '/home/projects/vitejs-vite-bqwee1at/.env.production.local' vite:env ] +0ms vite:env env files loaded in 8.78ms +8ms vite:env using resolved env: {} +2ms vite:config using resolved config: { vite:config plugins: [ vite:config 'vite:build-metadata', vite:config 'vite:watch-package-data', vite:config 'alias', vite:config 'vite:modulepreload-polyfill', vite:config 'vite:resolve', vite:config 'vite:html-inline-proxy', vite:config 'vite:css', vite:config 'vite:esbuild', vite:config 'vite:json', vite:config 'vite:wasm-helper', vite:config 'vite:worker', vite:config 'vite:asset', vite:config 'foo', vite:config 'vite:wasm-fallback', vite:config 'vite:define', vite:config 'vite:css-post', vite:config 'vite:build-html', vite:config 'vite:worker-import-meta-url', vite:config 'vite:asset-import-meta-url', vite:config 'vite:force-systemjs-wrap-complete', vite:config 'commonjs', vite:config 'vite:data-uri', vite:config 'vite:rollup-options-plugins', vite:config 'vite:dynamic-import-vars', vite:config 'vite:import-glob', vite:config 'vite:build-import-analysis', vite:config 'vite:esbuild-transpile', vite:config 'vite:terser', vite:config 'vite:manifest', vite:config 'vite:ssr-manifest', vite:config 'vite:reporter', vite:config 'vite:load-fallback' vite:config ], vite:config build: { vite:config target: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ], vite:config polyfillModulePreload: true, vite:config modulePreload: { polyfill: true }, vite:config outDir: 'dist', vite:config assetsDir: 'assets', vite:config assetsInlineLimit: 4096, vite:config sourcemap: false, vite:config terserOptions: {}, vite:config rollupOptions: {}, vite:config commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] }, vite:config dynamicImportVarsOptions: { warnOnError: true, exclude: [ /node_modules/ ] }, vite:config write: true, vite:config emptyOutDir: null, vite:config copyPublicDir: true, vite:config manifest: false, vite:config lib: false, vite:config ssrManifest: false, vite:config ssrEmitAssets: false, vite:config reportCompressedSize: true, vite:config chunkSizeWarningLimit: 500, vite:config watch: null, vite:config cssCodeSplit: true, vite:config minify: 'esbuild', vite:config ssr: false, vite:config emitAssets: true, vite:config createEnvironment: [Function: createEnvironment], vite:config cssTarget: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ], vite:config cssMinify: true vite:config }, vite:config environments: { vite:config client: { vite:config define: undefined, vite:config resolve: { vite:config externalConditions: [ 'node' ], vite:config extensions: [ vite:config '.mjs', '.js', vite:config '.mts', '.ts', vite:config '.jsx', '.tsx', vite:config '.json' vite:config ], vite:config dedupe: [], vite:config noExternal: [], vite:config external: [], vite:config preserveSymlinks: false, vite:config alias: [ vite:config { vite:config find: /^\/?@vite\/env/, vite:config replacement: '/@fs/home/projects/vitejs-vite-bqwee1at/node_modules/vite/dist/client/env.mjs' vite:config }, vite:config { vite:config find: /^\/?@vite\/client/, vite:config replacement: '/@fs/home/projects/vitejs-vite-bqwee1at/node_modules/vite/dist/client/client.mjs' vite:config } vite:config ], vite:config mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ], vite:config conditions: [ 'module', 'browser', 'development|production' ], vite:config builtins: [] vite:config }, vite:config keepProcessEnv: false, vite:config consumer: 'client', vite:config optimizeDeps: { vite:config include: [], vite:config exclude: [], vite:config needsInterop: [], vite:config extensions: [], vite:config disabled: undefined, vite:config holdUntilCrawlEnd: true, vite:config force: false, vite:config noDiscovery: false, vite:config esbuildOptions: { preserveSymlinks: false } vite:config }, vite:config dev: { vite:config warmup: [], vite:config sourcemap: { js: true }, vite:config sourcemapIgnoreList: [Function: isInNodeModules], vite:config preTransformRequests: true, vite:config createEnvironment: [Function: defaultCreateClientDevEnvironment], vite:config recoverable: true, vite:config moduleRunnerTransform: false vite:config }, vite:config build: { vite:config target: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ], vite:config polyfillModulePreload: true, vite:config modulePreload: { polyfill: true }, vite:config outDir: 'dist', vite:config assetsDir: 'assets', vite:config assetsInlineLimit: 4096, vite:config sourcemap: false, vite:config terserOptions: {}, vite:config rollupOptions: {}, vite:config commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] }, vite:config dynamicImportVarsOptions: { warnOnError: true, exclude: [ /node_modules/ ] }, vite:config write: true, vite:config emptyOutDir: null, vite:config copyPublicDir: true, vite:config manifest: false, vite:config lib: false, vite:config ssrManifest: false, vite:config ssrEmitAssets: false, vite:config reportCompressedSize: true, vite:config chunkSizeWarningLimit: 500, vite:config watch: null, vite:config cssCodeSplit: true, vite:config minify: 'esbuild', vite:config ssr: false, vite:config emitAssets: true, vite:config createEnvironment: [Function: createEnvironment], vite:config cssTarget: [ 'chrome107', 'edge107', 'firefox104', 'safari16' ], vite:config cssMinify: true vite:config }, vite:config plugins: [ vite:config { vite:config name: 'vite:build-metadata', vite:config renderChunk: [AsyncFunction: renderChunk] vite:config }, vite:config { vite:config name: 'vite:watch-package-data', vite:config buildStart: [Function: buildStart], vite:config buildEnd: [Function: buildEnd], vite:config watchChange: [Function: watchChange] vite:config }, vite:config { vite:config name: 'alias', vite:config buildStart: [AsyncFunction: buildStart], vite:config resolveId: [Function: resolveId] vite:config }, vite:config { vite:config name: 'vite:modulepreload-polyfill', vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [Function: handler] } vite:config }, vite:config { vite:config name: 'vite:resolve', vite:config resolveId: [AsyncFunction: resolveId], vite:config load: { handler: [Function: handler] } vite:config }, vite:config { vite:config name: 'vite:html-inline-proxy', vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [Function: handler] } vite:config }, vite:config { vite:config name: 'vite:css', vite:config buildStart: [Function: buildStart], vite:config buildEnd: [Function: buildEnd], vite:config load: { handler: [AsyncFunction: handler] }, vite:config transform: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:esbuild', vite:config configureServer: [Function: configureServer], vite:config transform: [AsyncFunction: transform] vite:config }, vite:config { vite:config name: 'vite:json', vite:config transform: { handler: [Function: handler] } vite:config }, vite:config { vite:config name: 'vite:wasm-helper', vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:worker', vite:config buildStart: [Function: buildStart], vite:config load: { handler: [AsyncFunction: handler] }, vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule], vite:config transform: { handler: [AsyncFunction: handler] }, vite:config renderChunk: [Function: renderChunk], vite:config generateBundle: [Function: generateBundle] vite:config }, vite:config { vite:config name: 'vite:asset', vite:config perEnvironmentStartEndDuringDev: true, vite:config buildStart: [Function: buildStart], vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [AsyncFunction: handler] }, vite:config renderChunk: [Function: renderChunk], vite:config generateBundle: [Function: generateBundle] vite:config }, vite:config { vite:config name: 'foo', vite:config transformIndexHtml: { order: 'pre', handler: [Function: handler] }, vite:config load: [Function: load] vite:config }, vite:config { vite:config name: 'vite:wasm-fallback', vite:config load: { handler: [Function: handler] } vite:config }, vite:config { vite:config name: 'vite:define', vite:config transform: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:css-post', vite:config renderStart: [Function: renderStart], vite:config transform: { handler: [AsyncFunction: handler] }, vite:config renderChunk: [AsyncFunction: renderChunk], vite:config augmentChunkHash: [Function: augmentChunkHash], vite:config generateBundle: [AsyncFunction: generateBundle] vite:config }, vite:config { vite:config name: 'vite:build-html', vite:config transform: { handler: [AsyncFunction: handler] }, vite:config generateBundle: [AsyncFunction: generateBundle] vite:config }, vite:config { vite:config name: 'vite:worker-import-meta-url', vite:config applyToEnvironment: [Function: applyToEnvironment], vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule], vite:config transform: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:asset-import-meta-url', vite:config applyToEnvironment: [Function: applyToEnvironment], vite:config transform: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:force-systemjs-wrap-complete', vite:config renderChunk: [Function: renderChunk] vite:config }, vite:config { vite:config name: 'commonjs', vite:config version: '28.0.6', vite:config options: [Function: options], vite:config buildStart: [Function: buildStart], vite:config buildEnd: [Function: buildEnd], vite:config load: [AsyncFunction: load], vite:config shouldTransformCachedModule: [Function: shouldTransformCachedModule], vite:config transform: [Function: transform] vite:config }, vite:config { vite:config name: 'vite:data-uri', vite:config buildStart: [Function: buildStart], vite:config resolveId: [Function: resolveId], vite:config load: [Function: load] vite:config }, vite:config { vite:config name: 'vite:dynamic-import-vars', vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [Function: handler] }, vite:config transform: { handler: [AsyncFunction: handler] } vite:config }, vite:config { vite:config name: 'vite:import-glob', vite:config buildStart: [Function: buildStart], vite:config transform: { handler: [AsyncFunction: handler] }, vite:config hotUpdate: [Function: hotUpdate] vite:config }, vite:config { vite:config name: 'vite:build-import-analysis', vite:config resolveId: { handler: [Function: handler] }, vite:config load: { handler: [Function: handler] }, vite:config transform: { handler: [AsyncFunction: handler] }, vite:config renderChunk: [Function: renderChunk], vite:config generateBundle: [Function: generateBundle] vite:config }, vite:config { vite:config name: 'vite:esbuild-transpile', vite:config applyToEnvironment: [Function: applyToEnvironment], vite:config renderChunk: [AsyncFunction: renderChunk] vite:config }, vite:config { vite:config name: 'vite:terser', vite:config applyToEnvironment: [Function: applyToEnvironment], vite:config renderChunk: [AsyncFunction: renderChunk], vite:config closeBundle: [Function: closeBundle] vite:config }, vite:config { vite:config name: 'vite:reporter', vite:config sharedDuringBuild: true, vite:config perEnvironmentStartEndDuringDev: true, vite:config transform: [Function: transform], vite:config buildStart: [Function: buildStart], vite:config buildEnd: [Function: buildEnd], vite:config renderStart: [Function: renderStart], vite:config renderChunk: [Function: renderChunk], vite:config generateBundle: [Function: generateBundle], vite:config writeBundle: [AsyncFunction: writeBundle] vite:config }, vite:config { vite:config name: 'vite:load-fallback', vite:config load: { handler: [AsyncFunction: handler] } vite:config } vite:config ] vite:config } vite:config }, vite:config resolve: { vite:config externalConditions: [ 'node' ], vite:config extensions: [ vite:config '.mjs', '.js', vite:config '.mts', '.ts', vite:config '.jsx', '.tsx', vite:config '.json' vite:config ], vite:config dedupe: [], vite:config noExternal: [], vite:config external: [], vite:config preserveSymlinks: false, vite:config alias: [ vite:config { vite:config find: /^\/?@vite\/env/, vite:config replacement: '/@fs/home/projects/vitejs-vite-bqwee1at/node_modules/vite/dist/client/env.mjs' vite:config }, vite:config { vite:config find: /^\/?@vite\/client/, vite:config replacement: '/@fs/home/projects/vitejs-vite-bqwee1at/node_modules/vite/dist/client/client.mjs' vite:config } vite:config ], vite:config mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ], vite:config conditions: [ 'module', 'browser', 'development|production' ], vite:config builtins: [] vite:config }, vite:config configFile: '/home/projects/vitejs-vite-bqwee1at/vite.config.js', vite:config configFileDependencies: [ '/home/projects/vitejs-vite-bqwee1at/vite.config.js' ], vite:config inlineConfig: { vite:config root: undefined, vite:config base: undefined, vite:config mode: undefined, vite:config configFile: undefined, vite:config configLoader: undefined, vite:config logLevel: undefined, vite:config clearScreen: undefined, vite:config build: {} vite:config }, vite:config root: '/home/projects/vitejs-vite-bqwee1at', vite:config base: '/', vite:config decodedBase: '/', vite:config rawBase: '/', vite:config publicDir: '/home/projects/vitejs-vite-bqwee1at/public', vite:config cacheDir: '/home/projects/vitejs-vite-bqwee1at/node_modules/.vite', vite:config command: 'build', vite:config mode: 'production', vite:config isWorker: false, vite:config mainConfig: null, vite:config bundleChain: [], vite:config isProduction: true, vite:config css: { vite:config transformer: 'postcss', vite:config preprocessorMaxWorkers: true, vite:config devSourcemap: false vite:config }, vite:config json: { namedExports: true, stringify: 'auto' }, vite:config esbuild: { jsxDev: false }, vite:config server: { vite:config port: 5173, vite:config strictPort: false, vite:config host: undefined, vite:config allowedHosts: [], vite:config https: undefined, vite:config open: false, vite:config proxy: undefined, vite:config cors: { vite:config origin: /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/ vite:config }, vite:config headers: {}, vite:config warmup: { clientFiles: [], ssrFiles: [] }, vite:config middlewareMode: false, vite:config fs: { vite:config strict: true, vite:config deny: [ '.env', '.env.*', '*.{crt,pem}', '**/.git/**' ], vite:config allow: [ '/home/projects/vitejs-vite-bqwee1at' ] vite:config }, vite:config preTransformRequests: true, vite:config perEnvironmentStartEndDuringDev: false, vite:config sourcemapIgnoreList: [Function: isInNodeModules] vite:config }, vite:config builder: undefined, vite:config preview: { vite:config port: 4173, vite:config strictPort: false, vite:config host: undefined, vite:config allowedHosts: [], vite:config https: undefined, vite:config open: false, vite:config proxy: undefined, vite:config cors: { vite:config origin: /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/ vite:config }, vite:config headers: {} vite:config }, vite:config envDir: '/home/projects/vitejs-vite-bqwee1at', vite:config env: { BASE_URL: '/', MODE: 'production', DEV: false, PROD: true }, vite:config assetsInclude: [Function: assetsInclude], vite:config logger: { vite:config hasWarned: false, vite:config info: [Function: info], vite:config warn: [Function: warn], vite:config warnOnce: [Function: warnOnce], vite:config error: [Function: error], vite:config clearScreen: [Function: clearScreen], vite:config hasErrorLogged: [Function: hasErrorLogged] vite:config }, vite:config packageCache: Map(1) { vite:config 'fnpd_/home/projects/vitejs-vite-bqwee1at' => { vite:config dir: '/home/projects/vitejs-vite-bqwee1at', vite:config data: { vite:config name: 'vite-starter', vite:config private: true, vite:config version: '0.0.0', vite:config type: 'module', vite:config scripts: { vite:config dev: 'vite', vite:config build: 'vite build --debug', vite:config preview: 'vite preview' vite:config }, vite:config devDependencies: { vite: '^7.0.0' } vite:config }, vite:config hasSideEffects: [Function: hasSideEffects], vite:config setResolvedCache: [Function: setResolvedCache], vite:config getResolvedCache: [Function: getResolvedCache] vite:config }, vite:config set: [Function (anonymous)] vite:config }, vite:config worker: { format: 'iife', plugins: '() => plugins', rollupOptions: {} }, vite:config appType: 'spa', vite:config experimental: { vite:config importGlobRestoreExtension: false, vite:config renderBuiltUrl: undefined, vite:config hmrPartialAccept: false vite:config }, vite:config future: undefined, vite:config ssr: { vite:config target: 'node', vite:config optimizeDeps: { esbuildOptions: { preserveSymlinks: false } }, vite:config resolve: { conditions: undefined, externalConditions: undefined } vite:config }, vite:config optimizeDeps: { vite:config include: [], vite:config exclude: [], vite:config needsInterop: [], vite:config extensions: [], vite:config disabled: undefined, vite:config holdUntilCrawlEnd: true, vite:config force: false, vite:config noDiscovery: false, vite:config esbuildOptions: { preserveSymlinks: false } vite:config }, vite:config dev: { vite:config warmup: [], vite:config sourcemap: { js: true }, vite:config sourcemapIgnoreList: [Function: isInNodeModules], vite:config preTransformRequests: false, vite:config createEnvironment: [Function: defaultCreateDevEnvironment], vite:config recoverable: false, vite:config moduleRunnerTransform: false vite:config }, vite:config webSocketToken: 'yNF86zYHQFC6', vite:config getSortedPlugins: [Function: getSortedPlugins], vite:config getSortedPluginHooks: [Function: getSortedPluginHooks], vite:config createResolver: [Function: createResolver], vite:config fsDenyGlob: [Function: arrayMatcher], vite:config safeModulePaths: Set(0) {}, vite:config [Symbol(vite:resolved-config)]: true vite:config } +102ms vite v7.0.0 building for production... { entrypoint: '/home/projects/vitejs-vite-bqwee1at/index.html' } transforming (5) src/counter.js{ entrypoint: '/home/projects/vitejs-vite-bqwee1at/src/foo.html' } ✓ 8 modules transformed. dist/src/foo.html 0.03 kB │ gzip: 0.05 kB dist/index.html 0.45 kB │ gzip: 0.29 kB dist/assets/index-CrYBktwj.css 1.20 kB │ gzip: 0.62 kB dist/assets/index-DwXTHeoX.js 2.70 kB │ gzip: 1.45 kB ✓ built in 1.76s
Validations
- Follow our Code of Conduct
- Read the Contributing Guidelines.
- Read the docs.
- Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
- Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to vuejs/core instead.
- Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
- The provided reproduction is a minimal reproducible example of the bug.