From 0c28448fa262791f57075775af0251cd95670ae0 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Thu, 17 Aug 2023 16:23:43 +0800 Subject: [PATCH] fix: revert "fix(plugin-vue): distinguish HMR and transform descriptor (#227)" This reverts commit aa2b59dfa61d7b747b044b00a748ca1b76150c6a. Fixes https://github.com/vuejs/vitepress/issues/2801 --- packages/plugin-vue/src/handleHotUpdate.ts | 11 ++++----- packages/plugin-vue/src/main.ts | 5 +--- .../plugin-vue/src/utils/descriptorCache.ts | 24 +++++++------------ 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/packages/plugin-vue/src/handleHotUpdate.ts b/packages/plugin-vue/src/handleHotUpdate.ts index f12ef54b..97ceefc5 100644 --- a/packages/plugin-vue/src/handleHotUpdate.ts +++ b/packages/plugin-vue/src/handleHotUpdate.ts @@ -6,7 +6,7 @@ import { isCSSRequest } from 'vite' import { createDescriptor, getDescriptor, - invalidateDescriptor, + setPrevDescriptor, } from './utils/descriptorCache' import { getResolvedScript, @@ -26,14 +26,16 @@ export async function handleHotUpdate( { file, modules, read }: HmrContext, options: ResolvedOptions, ): Promise { - const prevDescriptor = getDescriptor(file, options, false, true) + const prevDescriptor = getDescriptor(file, options, false) if (!prevDescriptor) { // file hasn't been requested yet (e.g. async component) return } + setPrevDescriptor(file, prevDescriptor) + const content = await read() - const { descriptor } = createDescriptor(file, content, options, true) + const { descriptor } = createDescriptor(file, content, options) let needRerender = false const affectedModules = new Set() @@ -148,9 +150,6 @@ export async function handleHotUpdate( updateType.push(`style`) } if (updateType.length) { - // invalidate the descriptor cache so that the next transform will - // re-analyze the file and pick up the changes. - invalidateDescriptor(file) debug(`[vue:update(${updateType.join('&')})] ${file}`) } return [...affectedModules].filter(Boolean) as ModuleNode[] diff --git a/packages/plugin-vue/src/main.ts b/packages/plugin-vue/src/main.ts index 6b426037..be5b5610 100644 --- a/packages/plugin-vue/src/main.ts +++ b/packages/plugin-vue/src/main.ts @@ -9,7 +9,6 @@ import { addMapping, fromMap, toEncodedMap } from '@jridgewell/gen-mapping' import { normalizePath, transformWithEsbuild } from 'vite' import { createDescriptor, - getDescriptor, getPrevDescriptor, setSrcDescriptor, } from './utils/descriptorCache' @@ -36,12 +35,10 @@ export async function transformMain( ) { const { devServer, isProduction, devToolsEnabled } = options + // prev descriptor is only set and used for hmr const prevDescriptor = getPrevDescriptor(filename) const { descriptor, errors } = createDescriptor(filename, code, options) - // set descriptor for HMR if it's not set yet - getDescriptor(filename, options, true, true) - if (errors.length) { errors.forEach((error) => pluginContext.error(createRollupError(filename, error)), diff --git a/packages/plugin-vue/src/utils/descriptorCache.ts b/packages/plugin-vue/src/utils/descriptorCache.ts index 932cc188..2152cd21 100644 --- a/packages/plugin-vue/src/utils/descriptorCache.ts +++ b/packages/plugin-vue/src/utils/descriptorCache.ts @@ -12,14 +12,12 @@ export interface SFCParseResult { } export const cache = new Map() -export const hmrCache = new Map() const prevCache = new Map() export function createDescriptor( filename: string, source: string, { root, isProduction, sourceMap, compiler }: ResolvedOptions, - hmr = false, ): SFCParseResult { const { descriptor, errors } = compiler.parse(source, { filename, @@ -30,7 +28,8 @@ export function createDescriptor( // project (relative to root) and on different systems. const normalizedPath = slash(path.normalize(path.relative(root, filename))) descriptor.id = getHash(normalizedPath + (isProduction ? source : '')) - ;(hmr ? hmrCache : cache).set(filename, descriptor) + + cache.set(filename, descriptor) return { descriptor, errors } } @@ -38,31 +37,26 @@ export function getPrevDescriptor(filename: string): SFCDescriptor | undefined { return prevCache.get(filename) } -export function invalidateDescriptor(filename: string, hmr = false): void { - const _cache = hmr ? hmrCache : cache - const prev = _cache.get(filename) - _cache.delete(filename) - if (prev) { - prevCache.set(filename, prev) - } +export function setPrevDescriptor( + filename: string, + entry: SFCDescriptor, +): void { + prevCache.set(filename, entry) } export function getDescriptor( filename: string, options: ResolvedOptions, createIfNotFound = true, - hmr = false, ): SFCDescriptor | undefined { - const _cache = hmr ? hmrCache : cache - if (_cache.has(filename)) { - return _cache.get(filename)! + if (cache.has(filename)) { + return cache.get(filename)! } if (createIfNotFound) { const { descriptor, errors } = createDescriptor( filename, fs.readFileSync(filename, 'utf-8'), options, - hmr, ) if (errors.length) { throw errors[0]