فهرست منبع

fix(compiler-sfc): respect sfc parse options in cache key

Evan You 2 سال پیش
والد
کامیت
b8d58ec4f4
1فایلهای تغییر یافته به همراه23 افزوده شده و 9 حذف شده
  1. 23 9
      packages/compiler-sfc/src/parse.ts

+ 23 - 9
packages/compiler-sfc/src/parse.ts

@@ -103,9 +103,30 @@ export interface SFCParseResult {
 
 export const parseCache = createCache<SFCParseResult>()
 
+function genCacheKey(source: string, options: SFCParseOptions): string {
+  return (
+    source +
+    JSON.stringify(
+      {
+        ...options,
+        compiler: { parse: options.compiler?.parse },
+      },
+      (_, val) => (typeof val === 'function' ? val.toString() : val),
+    )
+  )
+}
+
 export function parse(
   source: string,
-  {
+  options: SFCParseOptions = {},
+): SFCParseResult {
+  const sourceKey = genCacheKey(source, options)
+  const cache = parseCache.get(sourceKey)
+  if (cache) {
+    return cache
+  }
+
+  const {
     sourceMap = true,
     filename = DEFAULT_FILENAME,
     sourceRoot = '',
@@ -114,14 +135,7 @@ export function parse(
     compiler = CompilerDOM,
     templateParseOptions = {},
     parseExpressions = true,
-  }: SFCParseOptions = {},
-): SFCParseResult {
-  const sourceKey =
-    source + sourceMap + filename + sourceRoot + pad + compiler.parse
-  const cache = parseCache.get(sourceKey)
-  if (cache) {
-    return cache
-  }
+  } = options
 
   const descriptor: SFCDescriptor = {
     filename,