From: Evan You Date: Thu, 10 Nov 2022 09:02:45 +0000 (+0800) Subject: fix(sfc): ensure consistent dev/prod behavior for non-reactive variables declared... X-Git-Tag: v3.2.45~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5a3d45ae29e26938a36e16c7ab9a804bfe4bcb08;p=thirdparty%2Fvuejs%2Fcore.git fix(sfc): ensure consistent dev/prod behavior for non-reactive variables declared in ` `) - expect(content).toMatch('return { aa, bb, cc, dd, a, b, c, d, xx, x }') + expect(content).toMatch( + 'return { get aa() { return aa }, bb, cc, dd, get a() { return a }, b, c, d, xx, x }' + ) expect(bindings).toStrictEqual({ x: BindingTypes.SETUP_MAYBE_REF, a: BindingTypes.SETUP_LET, diff --git a/packages/compiler-sfc/__tests__/compileScriptRefTransform.spec.ts b/packages/compiler-sfc/__tests__/compileScriptRefTransform.spec.ts index 88d62f2b47..6d60137974 100644 --- a/packages/compiler-sfc/__tests__/compileScriptRefTransform.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScriptRefTransform.spec.ts @@ -32,7 +32,9 @@ describe('sfc ref transform', () => { // normal declarations left untouched expect(content).toMatch(`let c = () => {}`) expect(content).toMatch(`let d`) - expect(content).toMatch(`return { foo, a, b, c, d, ref, shallowRef }`) + expect(content).toMatch( + `return { foo, a, b, get c() { return c }, get d() { return d }, ref, shallowRef }` + ) assertCode(content) expect(bindings).toStrictEqual({ foo: BindingTypes.SETUP_REF, diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index e944b76472..74e3dbd734 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -1484,7 +1484,15 @@ export function compileScript( allBindings[key] = true } } - returned = `{ ${Object.keys(allBindings).join(', ')} }` + returned = `{ ` + for (const key in allBindings) { + if (bindingMetadata[key] === BindingTypes.SETUP_LET) { + returned += `get ${key}() { return ${key} }, ` + } else { + returned += `${key}, ` + } + } + returned = returned.replace(/, $/, '') + ` }` } else { // inline mode if (sfc.template && !sfc.template.src) {