Prechádzať zdrojové kódy

fix(compiler-sfc): check template `ref` usage, (#12985)

close #12984
lsdsjy 2 rokov pred
rodič
commit
83d95351a9

+ 2 - 0
packages/compiler-sfc/src/compileScript.ts

@@ -1818,6 +1818,8 @@ function resolveTemplateUsageCheckString(sfc: SFCDescriptor, isTS: boolean) {
           if (value) {
             code += `,${processExp(value, isTS, baseName)}`
           }
+        } else if (name === 'ref') {
+          code += `,${value}`
         }
       }
     },

+ 14 - 0
packages/compiler-sfc/test/__snapshots__/compileScript.spec.ts.snap

@@ -364,6 +364,20 @@ return { vMyDir }
 })"
 `;
 
+exports[`SFC compile <script setup> > dev mode import usage check > imported ref as template ref 1`] = `
+"import { defineComponent as _defineComponent } from 'vue'
+import { aref } from './x'
+        
+export default /*#__PURE__*/_defineComponent({
+  setup(__props) {
+
+        
+return { aref }
+}
+
+})"
+`;
+
 exports[`SFC compile <script setup> > dev mode import usage check > js template string interpolations 1`] = `
 "import { defineComponent as _defineComponent } from 'vue'
 import { VAR, VAR2, VAR3 } from './x'

+ 13 - 0
packages/compiler-sfc/test/compileScript.spec.ts

@@ -398,6 +398,19 @@ defineExpose({ foo: 123 })
       assertCode(content)
     })
 
+    test('imported ref as template ref', () => {
+      const { content } = compile(`
+        <script setup lang="ts">
+        import { aref } from './x'
+        </script>
+        <template>
+          <div ref="aref"></div>
+        </template>
+        `)
+      expect(content).toMatch(`return { aref }`)
+      assertCode(content)
+    })
+
     test('vue interpolations', () => {
       const { content } = compile(`
       <script setup lang="ts">