Przeglądaj źródła

build: avoid runtime wildcard import in global build

Evan You 6 lat temu
rodzic
commit
32d6a46474
4 zmienionych plików z 12 dodań i 1 usunięć
  1. 1 0
      jest.config.js
  2. 1 0
      packages/global.d.ts
  3. 7 1
      packages/vue/src/index.ts
  4. 3 0
      rollup.config.js

+ 1 - 0
jest.config.js

@@ -7,6 +7,7 @@ module.exports = {
     __BROWSER__: false,
     __BUNDLER__: true,
     __RUNTIME_COMPILE__: true,
+    __GLOBAL__: false,
     __NODE_JS__: true,
     __FEATURE_OPTIONS__: true,
     __FEATURE_SUSPENSE__: true

+ 1 - 0
packages/global.d.ts

@@ -4,6 +4,7 @@ declare var __TEST__: boolean
 declare var __BROWSER__: boolean
 declare var __BUNDLER__: boolean
 declare var __RUNTIME_COMPILE__: boolean
+declare var __GLOBAL__: boolean
 declare var __NODE_JS__: boolean
 declare var __COMMIT__: string
 declare var __VERSION__: string

+ 7 - 1
packages/vue/src/index.ts

@@ -58,7 +58,13 @@ function compileToFunction(
     ...options
   })
 
-  const render = new Function('Vue', code)(runtimeDom) as RenderFunction
+  // The wildcard import results in a huge object with every export
+  // with keys that cannot be mangled, and can be quite heavy size-wise.
+  // In the global build we know `Vue` is available globally so we can avoid
+  // the wildcard object.
+  const render = (__GLOBAL__
+    ? new Function(code)()
+    : new Function('Vue', code)(runtimeDom)) as RenderFunction
   return (compileCache[key] = render)
 }
 

+ 3 - 0
rollup.config.js

@@ -136,6 +136,7 @@ function createConfig(format, output, plugins = []) {
         (isGlobalBuild || isRawESMBuild || isBundlerESMBuild) &&
           !packageOptions.enableNonBrowserBranches,
         isRuntimeCompileBuild,
+        isGlobalBuild,
         isNodeBuild
       ),
       ...plugins
@@ -154,6 +155,7 @@ function createReplacePlugin(
   isBundlerESMBuild,
   isBrowserBuild,
   isRuntimeCompileBuild,
+  isGlobalBuild,
   isNodeBuild
 ) {
   const replacements = {
@@ -172,6 +174,7 @@ function createReplacePlugin(
     __BUNDLER__: isBundlerESMBuild,
     // support compile in browser?
     __RUNTIME_COMPILE__: isRuntimeCompileBuild,
+    __GLOBAL__: isGlobalBuild,
     // is targeting Node (SSR)?
     __NODE_JS__: isNodeBuild,
     // support options?