fix(compiler-core): fix bail constant for globals

This commit is contained in:
Evan You 2024-04-29 16:21:25 +08:00
parent 638a79f64a
commit fefce06b41
No known key found for this signature in database
GPG Key ID: B9D421896CA450FB
2 changed files with 21 additions and 1 deletions

View File

@ -431,6 +431,21 @@ describe('compiler: expression transform', () => {
})
})
test('should not bail constant on strings w/ ()', () => {
const node = parseWithExpressionTransform(
`{{ new Date().getFullYear() }}`,
) as InterpolationNode
expect(node.content).toMatchObject({
children: [
'new ',
{ constType: ConstantTypes.NOT_CONSTANT },
'().',
{ constType: ConstantTypes.NOT_CONSTANT },
'()',
],
})
})
describe('ES Proposals support', () => {
test('bigInt', () => {
const node = parseWithExpressionTransform(

View File

@ -311,7 +311,12 @@ export function processExpression(
} else {
// The identifier is considered constant unless it's pointing to a
// local scope variable (a v-for alias, or a v-slot prop)
if (!(needPrefix && isLocal)) {
if (
!(needPrefix && isLocal) &&
parent.type !== 'CallExpression' &&
parent.type !== 'NewExpression' &&
parent.type !== 'MemberExpression'
) {
;(node as QualifiedId).isConstant = true
}
// also generate sub-expressions for other identifiers for better