diff --git a/src/main.ts b/src/main.ts index 9e65e6f..346d3e6 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,6 +3,7 @@ import type { SFCBlock, SFCDescriptor } from 'vue/compiler-sfc' import type { PluginContext, TransformPluginContext } from 'rollup' import type { RawSourceMap } from 'source-map' import { transformWithEsbuild } from 'vite' +import os from 'node:os'; import { createDescriptor, getPrevDescriptor, @@ -16,6 +17,15 @@ import type { ResolvedOptions } from '.' import { NORMALIZER_ID } from './utils/componentNormalizer' import { HMR_RUNTIME_ID } from './utils/hmrRuntime' +const isWindows = os.platform() === 'win32'; +function slash(p: string) { + return p.replace(/\\/g, '/'); +} +function normalizePath(id: string) { + return path.posix.normalize(isWindows ? slash(id) : id); +} + + export async function transformMain( code: string, filename: string, @@ -71,6 +81,7 @@ export async function transformMain( stylesCode, customBlocksCode ] + const moduleIdentifier = normalizePath(path.relative(options.root, filename)); output.push( `/* normalize component */ @@ -82,7 +93,7 @@ var __component__ = /*#__PURE__*/__normalizer( ${hasFunctional ? 'true' : 'false'}, ${hasCssModules ? `_sfc_injectStyles` : `null`}, ${hasScoped ? JSON.stringify(descriptor.id) : 'null'}, - null, + ${ssr ? `"${moduleIdentifier}"` : null}, null )` ) diff --git a/src/utils/componentNormalizer.ts b/src/utils/componentNormalizer.ts index f1c6cee..a890b34 100644 --- a/src/utils/componentNormalizer.ts +++ b/src/utils/componentNormalizer.ts @@ -52,9 +52,11 @@ export default function normalizeComponent ( if (injectStyles) { injectStyles.call(this, context) } - // register component module identifier for async chunk inference - if (context && context._registeredComponents) { - context._registeredComponents.add(moduleIdentifier) + if (context) { + if (!context.modules) { + context.modules = new Set(); + } + context.modules.add(moduleIdentifier) } } // used by ssr in case component is cached and beforeCreate