Skip to content

Commit 95c07d8

Browse files
authored
fix(runtime-core): fix priority of option merging (#2041)
1 parent 71b6fed commit 95c07d8

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

packages/runtime-core/__tests__/apiCreateApp.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ describe('api: createApp', () => {
457457
app.config.optionMergeStrategies.foo = (a, b) => (a ? `${a},` : ``) + b
458458

459459
app.mount(nodeOps.createElement('div'))
460-
expect(merged!).toBe('local,extends,mixin,global')
460+
expect(merged!).toBe('global,extends,mixin,local')
461461
})
462462

463463
test('config.globalProperties', () => {

packages/runtime-core/src/componentOptions.ts

+8-7
Original file line numberDiff line numberDiff line change
@@ -768,23 +768,24 @@ export function resolveMergedOptions(
768768
const globalMixins = instance.appContext.mixins
769769
if (!globalMixins.length && !mixins && !extendsOptions) return raw
770770
const options = {}
771-
mergeOptions(options, raw, instance)
772771
globalMixins.forEach(m => mergeOptions(options, m, instance))
772+
mergeOptions(options, raw, instance)
773773
return (raw.__merged = options)
774774
}
775775

776776
function mergeOptions(to: any, from: any, instance: ComponentInternalInstance) {
777777
const strats = instance.appContext.config.optionMergeStrategies
778+
const { mixins, extends: extendsOptions } = from
779+
780+
extendsOptions && mergeOptions(to, extendsOptions, instance)
781+
mixins &&
782+
mixins.forEach((m: ComponentOptionsMixin) => mergeOptions(to, m, instance))
783+
778784
for (const key in from) {
779785
if (strats && hasOwn(strats, key)) {
780786
to[key] = strats[key](to[key], from[key], instance.proxy, key)
781-
} else if (!hasOwn(to, key)) {
787+
} else {
782788
to[key] = from[key]
783789
}
784790
}
785-
const { mixins, extends: extendsOptions } = from
786-
787-
extendsOptions && mergeOptions(to, extendsOptions, instance)
788-
mixins &&
789-
mixins.forEach((m: ComponentOptionsMixin) => mergeOptions(to, m, instance))
790791
}

0 commit comments

Comments
 (0)