Переглянути джерело

fix(compiler-sfc): register exported bindings in normal script when using script setup (#4601)

fix #4600
edison 4 роки тому
батько
коміт
8055445b68

+ 4 - 4
packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap

@@ -11,7 +11,7 @@ export default {
 
       x()
       
-return { x }
+return { n, x }
 }
 
 }"
@@ -26,7 +26,7 @@ export default {
 
       x()
       
-return { x }
+return { n, x }
 }
 
 }
@@ -66,7 +66,7 @@ function setup(__props, { expose }) {
 
         x()
         
-return { x }
+return { n, x }
 }
 
 
@@ -87,7 +87,7 @@ function setup(__props, { expose }) {
 
         x()
         
-return { x }
+return { n, x }
 }
 
 

+ 14 - 0
packages/compiler-sfc/__tests__/compileScript.spec.ts

@@ -1295,6 +1295,20 @@ describe('SFC analyze <script> bindings', () => {
     expect(bindings!.__isScriptSetup).toBe(false)
   })
 
+  it('recognizes exported vars', () => {
+    const { bindings } = compile(`
+      <script>
+        export const foo = 2
+      </script>
+      <script setup>
+        console.log(foo)
+      </script>
+    `)
+    expect(bindings).toStrictEqual({
+      foo: BindingTypes.SETUP_CONST
+    })
+  })
+
   it('recognizes async setup return', () => {
     const { bindings } = compile(`
       <script>

+ 4 - 1
packages/compiler-sfc/src/compileScript.ts

@@ -702,7 +702,7 @@ export function compileScript(
         const start = node.start! + scriptStartOffset!
         const end = node.declaration.start! + scriptStartOffset!
         s.overwrite(start, end, `const ${defaultTempVar} = `)
-      } else if (node.type === 'ExportNamedDeclaration' && node.specifiers) {
+      } else if (node.type === 'ExportNamedDeclaration') {
         const defaultSpecifier = node.specifiers.find(
           s => s.exported.type === 'Identifier' && s.exported.name === 'default'
         ) as ExportSpecifier
@@ -735,6 +735,9 @@ export function compileScript(
             )
           }
         }
+        if (node.declaration) {
+          walkDeclaration(node.declaration, setupBindings, userImportAlias)
+        }
       } else if (
         (node.type === 'VariableDeclaration' ||
           node.type === 'FunctionDeclaration' ||