diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts
index d6e066d806..719b53592d 100644
--- a/packages/compiler-sfc/src/compileScript.ts
+++ b/packages/compiler-sfc/src/compileScript.ts
@@ -910,11 +910,11 @@ export function compileScript(
} else {
let start = decl.start! + startOffset
let end = decl.end! + startOffset
- if (i < total - 1) {
- // not the last one, locate the start of the next
+ if (i === 0) {
+ // first one, locate the start of the next
end = node.declarations[i + 1].start! + startOffset
} else {
- // last one, locate the end of the prev
+ // not first one, locate the end of the prev
start = node.declarations[i - 1].end! + startOffset
}
s.remove(start, end)
diff --git a/packages/compiler-sfc/test/__snapshots__/compileScript.spec.ts.snap b/packages/compiler-sfc/test/__snapshots__/compileScript.spec.ts.snap
index bcecdb4efb..594c909ee3 100644
--- a/packages/compiler-sfc/test/__snapshots__/compileScript.spec.ts.snap
+++ b/packages/compiler-sfc/test/__snapshots__/compileScript.spec.ts.snap
@@ -288,6 +288,22 @@ return { props, a, emit }
}"
`;
+exports[`SFC compile
+ `)
+ assertCode(content)
+ expect(content).toMatch(`const a = 1;`) // test correct removal
+ expect(content).toMatch(`props: ['item'],`)
+ expect(content).toMatch(`emits: ['a'],`)
+ })
+
test('defineProps/defineEmits in multi-variable declaration (full removal)', () => {
const { content } = compile(`