Browse Source

fix(compiler-sfc): fix parse-only mode when there is no script setup block

Evan You 4 years ago
parent
commit
253ca2729d

+ 10 - 0
packages/compiler-sfc/__tests__/compileScriptParseOnlyMode.spec.ts

@@ -74,4 +74,14 @@ describe('compileScript parseOnly mode', () => {
     const { ranges } = compile(`<script setup lang="ts">${src}</script>`)
     const { ranges } = compile(`<script setup lang="ts">${src}</script>`)
     expect(getRange(src, ranges!.emitsTypeArg!)).toBe(`{ (e: 'x'): void }`)
     expect(getRange(src, ranges!.emitsTypeArg!)).toBe(`{ (e: 'x'): void }`)
   })
   })
+
+  test('no script setup block', () => {
+    const src = `import { x } from './x'`
+    const { ranges } = compile(`<script>${src}</script>`)
+    expect(getRange(src, ranges!.scriptBindings[0])).toBe(`x`)
+  })
+
+  test('no script block', () => {
+    expect(() => compile(`<style>hello</style>`)).not.toThrow()
+  })
 })
 })

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

@@ -1,5 +1,10 @@
 import MagicString from 'magic-string'
 import MagicString from 'magic-string'
-import { BindingMetadata, BindingTypes, UNREF } from '@vue/compiler-core'
+import {
+  BindingMetadata,
+  BindingTypes,
+  locStub,
+  UNREF
+} from '@vue/compiler-core'
 import {
 import {
   ScriptSetupTextRanges,
   ScriptSetupTextRanges,
   SFCDescriptor,
   SFCDescriptor,
@@ -126,7 +131,7 @@ export function compileScript(
       type: 'script',
       type: 'script',
       content: '',
       content: '',
       attrs: {},
       attrs: {},
-      loc: null as any
+      loc: locStub
     }
     }
   }
   }