diff --git a/packages/playground/css-sourcemap/__tests__/serve.spec.ts b/packages/playground/css-sourcemap/__tests__/serve.spec.ts
index fb2dd97967d91f..0c6696b0dff7a2 100644
--- a/packages/playground/css-sourcemap/__tests__/serve.spec.ts
+++ b/packages/playground/css-sourcemap/__tests__/serve.spec.ts
@@ -83,6 +83,8 @@ if (!isBuild) {
import './imported.styl'
+
+
",
],
"version": 3,
diff --git a/packages/playground/css-sourcemap/index.html b/packages/playground/css-sourcemap/index.html
index d0e9980b926125..a943c1d113a9b4 100644
--- a/packages/playground/css-sourcemap/index.html
+++ b/packages/playground/css-sourcemap/index.html
@@ -41,3 +41,5 @@
CSS Sourcemap
import './imported.styl'
+
+
diff --git a/packages/playground/css-sourcemap/vite.config.js b/packages/playground/css-sourcemap/vite.config.js
index 2e70a4a0894406..f743687ddd9b0e 100644
--- a/packages/playground/css-sourcemap/vite.config.js
+++ b/packages/playground/css-sourcemap/vite.config.js
@@ -36,5 +36,25 @@ module.exports = {
},
build: {
sourcemap: true
- }
+ },
+ plugins: [
+ {
+ name: 'virtual-html',
+ configureServer(server) {
+ server.middlewares.use(async (req, res, next) => {
+ if (req.url === '/virtual.html') {
+ const t = await server.transformIndexHtml(
+ '/virtual.html',
+ ' virtual html
'
+ )
+ res.setHeader('Content-Type', 'text/html')
+ res.statusCode = 200
+ res.end(t)
+ return
+ }
+ next()
+ })
+ }
+ }
+ ]
}
diff --git a/packages/vite/src/node/plugins/html.ts b/packages/vite/src/node/plugins/html.ts
index 733b2e4829f12c..30e65a36f83bbe 100644
--- a/packages/vite/src/node/plugins/html.ts
+++ b/packages/vite/src/node/plugins/html.ts
@@ -705,6 +705,8 @@ export function resolveHtmlTransforms(
return [preHooks, postHooks]
}
+export const maybeVirtualHtmlSet = new Set()
+
export async function applyHtmlTransforms(
html: string,
hooks: IndexHtmlTransformHook[],
@@ -715,6 +717,8 @@ export async function applyHtmlTransforms(
const bodyTags: HtmlTagDescriptor[] = []
const bodyPrependTags: HtmlTagDescriptor[] = []
+ maybeVirtualHtmlSet.add(ctx.filename)
+
for (const hook of hooks) {
const res = await hook(html, ctx)
if (!res) {
diff --git a/packages/vite/src/node/server/sourcemap.ts b/packages/vite/src/node/server/sourcemap.ts
index 68684a3c2d6f2a..dc77c4a4714298 100644
--- a/packages/vite/src/node/server/sourcemap.ts
+++ b/packages/vite/src/node/server/sourcemap.ts
@@ -1,8 +1,9 @@
import path from 'path'
import { promises as fs } from 'fs'
import type { Logger } from '../logger'
-import { createDebugger } from '../utils'
+import { createDebugger, normalizePath } from '../utils'
import type { SourceMap } from 'rollup'
+import { maybeVirtualHtmlSet } from '../plugins/html'
const isDebug = !!process.env.DEBUG
const debug = createDebugger('vite:sourcemap', {
@@ -42,6 +43,7 @@ export async function injectSourcesContent(
sourcePath = path.resolve(sourceRoot, sourcePath)
}
return fs.readFile(sourcePath, 'utf-8').catch(() => {
+ if (maybeVirtualHtmlSet.has(normalizePath(sourcePath))) return null
missingSources.push(sourcePath)
return null
})