Skip to content

Commit af45a9d

Browse files
authored
perf: use extends over createLocalVue (#934)
1 parent 71a2e7b commit af45a9d

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

Diff for: packages/create-instance/create-instance.js

+9-3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { componentNeedsCompiling, isPlainObject } from 'shared/validators'
1313
import { validateSlots } from './validate-slots'
1414
import createScopedSlots from './create-scoped-slots'
1515
import { extendExtendedComponents } from './extend-extended-components'
16+
import Vue from 'vue'
1617

1718
function compileTemplateForSlots (slots: Object): void {
1819
Object.keys(slots).forEach(key => {
@@ -43,13 +44,18 @@ const UNSUPPORTED_VERSION_OPTIONS = [
4344

4445
export default function createInstance (
4546
component: Component,
46-
options: Options,
47-
_Vue: Component,
48-
elm?: Element
47+
options: Options
4948
): Component {
5049
// Remove cached constructor
5150
delete component._Ctor
5251

52+
const _Vue = options.localVue
53+
? options.localVue.extend()
54+
: Vue.extend()
55+
56+
// make sure all extends are based on this instance
57+
_Vue.options._base = _Vue
58+
5359
if (
5460
vueVersion < 2.3 &&
5561
typeof component === 'function' &&

Diff for: packages/server-test-utils/src/renderToString.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import Vue from 'vue'
44
import createInstance from 'create-instance'
55
import { throwError } from 'shared/util'
66
import { createRenderer } from 'vue-server-renderer'
7-
import testUtils from '@vue/test-utils'
87
import { mergeOptions } from 'shared/merge-options'
98
import config from './config'
109

@@ -28,11 +27,10 @@ export default function renderToString (
2827
if (options.attachToDocument) {
2928
throwError(`you cannot use attachToDocument with ` + `renderToString`)
3029
}
31-
const vueConstructor = testUtils.createLocalVue(options.localVue)
30+
3231
const vm = createInstance(
3332
component,
34-
mergeOptions(options, config),
35-
vueConstructor
33+
mergeOptions(options, config)
3634
)
3735
let renderedString = ''
3836

Diff for: packages/test-utils/src/mount.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import Vue from 'vue'
66
import VueWrapper from './vue-wrapper'
77
import createInstance from 'create-instance'
88
import createElement from './create-element'
9-
import createLocalVue from './create-local-vue'
109
import errorHandler from './error-handler'
1110
import { findAllVueComponentsFromVm } from './find-vue-components'
1211
import { mergeOptions } from 'shared/merge-options'
@@ -27,17 +26,14 @@ export default function mount (
2726

2827
// Remove cached constructor
2928
delete component._Ctor
30-
const vueConstructor = createLocalVue(options.localVue)
3129

3230
const elm = options.attachToDocument ? createElement() : undefined
3331

3432
const mergedOptions = mergeOptions(options, config)
3533

3634
const parentVm = createInstance(
3735
component,
38-
mergedOptions,
39-
vueConstructor,
40-
elm
36+
mergedOptions
4137
)
4238

4339
const vm = parentVm.$mount(elm).$refs.vm

0 commit comments

Comments
 (0)