diff --git a/packages/runtime-core/__tests__/hmr.spec.ts b/packages/runtime-core/__tests__/hmr.spec.ts index 08b734fa3ca..400ef30b07a 100644 --- a/packages/runtime-core/__tests__/hmr.spec.ts +++ b/packages/runtime-core/__tests__/hmr.spec.ts @@ -19,7 +19,7 @@ const { createRecord, rerender, reload } = __VUE_HMR_RUNTIME__ function compileToFunction(template: string) { const { code } = baseCompile(template) const render = new Function('Vue', code)(runtimeTest) as RenderFunction - render.isRuntimeCompiled = true + render._rc = true // isRuntimeCompiled return render } diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 05112c70f74..5bccb756d32 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -96,7 +96,7 @@ export interface SetupContext { export type RenderFunction = { (): VNodeChild - isRuntimeCompiled?: boolean + _rc?: boolean // isRuntimeCompiled } export interface ComponentInternalInstance { @@ -437,29 +437,24 @@ function finishComponentSetup( instance.render = Component.render as RenderFunction } } else if (!instance.render) { - if (__RUNTIME_COMPILE__ && Component.template && !Component.render) { - // __RUNTIME_COMPILE__ ensures `compile` is provided - Component.render = compile!(Component.template, { + if (compile && Component.template && !Component.render) { + Component.render = compile(Component.template, { isCustomElement: instance.appContext.config.isCustomElement || NO }) // mark the function as runtime compiled - ;(Component.render as RenderFunction).isRuntimeCompiled = true + ;(Component.render as RenderFunction)._rc = true } if (__DEV__ && !Component.render) { /* istanbul ignore if */ - if (!__RUNTIME_COMPILE__ && Component.template) { + if (!compile && Component.template) { warn( `Component provides template but the build of Vue you are running ` + `does not support runtime template compilation. Either use the ` + `full build or pre-compile the template using Vue CLI.` ) } else { - warn( - `Component is missing${ - __RUNTIME_COMPILE__ ? ` template or` : `` - } render function.` - ) + warn(`Component is missing template or render function.`) } } @@ -468,7 +463,7 @@ function finishComponentSetup( // for runtime-compiled render functions using `with` blocks, the render // proxy used needs a different `has` handler which is more performant and // also only allows a whitelist of globals to fallthrough. - if (__RUNTIME_COMPILE__ && instance.render.isRuntimeCompiled) { + if (instance.render._rc) { instance.withProxy = new Proxy( instance, runtimeCompiledRenderProxyHandlers diff --git a/packages/runtime-core/src/componentProxy.ts b/packages/runtime-core/src/componentProxy.ts index 4770fd9b464..fcbc406478a 100644 --- a/packages/runtime-core/src/componentProxy.ts +++ b/packages/runtime-core/src/componentProxy.ts @@ -75,10 +75,6 @@ const enum AccessTypes { export const PublicInstanceProxyHandlers: ProxyHandler = { get(target: ComponentInternalInstance, key: string) { - // fast path for unscopables when using `with` block - if (__RUNTIME_COMPILE__ && (key as any) === Symbol.unscopables) { - return - } const { renderContext, data, @@ -189,6 +185,13 @@ export const PublicInstanceProxyHandlers: ProxyHandler = { export const runtimeCompiledRenderProxyHandlers = { ...PublicInstanceProxyHandlers, + get(target: ComponentInternalInstance, key: string) { + // fast path for unscopables when using `with` block + if ((key as any) === Symbol.unscopables) { + return + } + return PublicInstanceProxyHandlers.get!(target, key, target) + }, has(_target: ComponentInternalInstance, key: string) { return key[0] !== '_' && !isGloballyWhitelisted(key) } diff --git a/packages/runtime-dom/src/index.ts b/packages/runtime-dom/src/index.ts index d3743e4febe..148b08ca8a7 100644 --- a/packages/runtime-dom/src/index.ts +++ b/packages/runtime-dom/src/index.ts @@ -58,12 +58,7 @@ export const createApp = ((...args) => { const container = normalizeContainer(containerOrSelector) if (!container) return const component = app._component - if ( - __RUNTIME_COMPILE__ && - !isFunction(component) && - !component.render && - !component.template - ) { + if (!isFunction(component) && !component.render && !component.template) { component.template = container.innerHTML } // clear content before mounting diff --git a/packages/vue/package.json b/packages/vue/package.json index 557a78ba27e..0d422893e7b 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -13,7 +13,6 @@ ], "buildOptions": { "name": "Vue", - "isRuntimeCompileBuild": true, "formats": [ "esm-bundler", "esm-bundler-runtime", diff --git a/rollup.config.js b/rollup.config.js index 46f3d3fccd7..c90f4e03c74 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -77,7 +77,6 @@ function createConfig(format, output, plugins = []) { const isRawESMBuild = format === 'esm' const isNodeBuild = format === 'cjs' const isBundlerESMBuild = /esm-bundler/.test(format) - const isRuntimeCompileBuild = packageOptions.isRuntimeCompileBuild if (isGlobalBuild) { output.name = packageOptions.name @@ -132,7 +131,6 @@ function createConfig(format, output, plugins = []) { // isBrowserBuild? (isGlobalBuild || isRawESMBuild || isBundlerESMBuild) && !packageOptions.enableNonBrowserBranches, - isRuntimeCompileBuild, isGlobalBuild, isNodeBuild ), @@ -152,7 +150,6 @@ function createReplacePlugin( isProduction, isBundlerESMBuild, isBrowserBuild, - isRuntimeCompileBuild, isGlobalBuild, isNodeBuild ) { @@ -170,8 +167,6 @@ function createReplacePlugin( __BROWSER__: isBrowserBuild, // is targeting bundlers? __BUNDLER__: isBundlerESMBuild, - // support compile in browser? - __RUNTIME_COMPILE__: isRuntimeCompileBuild, __GLOBAL__: isGlobalBuild, // is targeting Node (SSR)? __NODE_JS__: isNodeBuild,