]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
feat: build vapor & add @vue/vapor package
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Tue, 28 Nov 2023 17:25:46 +0000 (01:25 +0800)
committer三咲智子 Kevin Deng <sxzz@sxzz.moe>
Tue, 28 Nov 2023 17:26:01 +0000 (01:26 +0800)
30 files changed:
package.json
packages/compiler-vapor/package.json
packages/runtime-vapor/index.js [new file with mode: 0644]
packages/runtime-vapor/package.json
packages/runtime-vapor/src/index.ts
packages/vue-vapor/LICENSE [new file with mode: 0644]
packages/vue-vapor/README.md [new file with mode: 0644]
packages/vue-vapor/index.js [new file with mode: 0644]
packages/vue-vapor/index.mjs [new file with mode: 0644]
packages/vue-vapor/package.json [new file with mode: 0644]
packages/vue-vapor/src/dev.ts [new file with mode: 0644]
packages/vue-vapor/src/index.ts [new file with mode: 0644]
packages/vue-vapor/src/runtime.ts [new file with mode: 0644]
packages/vue/compiler-vapor/index.d.mts [deleted file]
packages/vue/compiler-vapor/index.d.ts [deleted file]
packages/vue/compiler-vapor/index.js [deleted file]
packages/vue/compiler-vapor/index.mjs [deleted file]
packages/vue/compiler-vapor/package.json [deleted file]
packages/vue/package.json
packages/vue/vapor/index.d.mts
packages/vue/vapor/index.d.ts
packages/vue/vapor/index.js
packages/vue/vapor/index.mjs
pnpm-lock.yaml
rollup.config.js
scripts/dev.js
scripts/prepare-cjs.js [moved from scripts/pre-dev-sfc.js with 95% similarity]
scripts/usage-size.ts
tsconfig.build.json
tsconfig.json

index e2db412dcbe5aa54a4f55808917b70eb1d217573..27814f80d2808e3a6870baad30b6855964d082f1 100644 (file)
@@ -1,16 +1,16 @@
 {
   "private": true,
-  "version": "3.3.9",
+  "version": "0.0.0-vapor",
   "packageManager": "pnpm@8.10.5",
   "type": "module",
   "scripts": {
-    "dev": "node scripts/dev.js",
+    "dev": "node scripts/dev.js vue vue-vapor",
     "build": "node scripts/build.js",
     "build-dts": "tsc -p tsconfig.build.json && rollup -c rollup.dts.config.js",
     "clean": "rimraf packages/*/dist temp .eslintcache",
     "size": "run-s \"size-*\" && tsx scripts/usage-size.ts",
-    "size-global": "node scripts/build.js vue runtime-dom compiler-dom compiler-vapor -f global -p --size",
-    "size-esm-runtime": "node scripts/build.js vue -f esm-bundler-runtime",
+    "size-global": "node scripts/build.js vue vue-vapor runtime-dom runtime-vapor -f global -p --size",
+    "size-esm-runtime": "node scripts/build.js vue vue-vapor -f esm-bundler-runtime",
     "size-esm": "node scripts/build.js runtime-dom runtime-vapor runtime-core reactivity shared -f esm-bundler",
     "check": "tsc --incremental --noEmit",
     "lint": "eslint --cache --ext .ts packages/*/{src,__tests__}/**.ts",
     "release": "node scripts/release.js",
     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
     "dev-esm": "node scripts/dev.js -if esm-bundler-runtime",
+    "dev-prepare-cjs": "node scripts/prepare-cjs.js || npm run build-all-cjs",
     "dev-compiler": "run-p \"dev template-explorer\" serve",
-    "dev-sfc": "run-s dev-sfc-prepare dev-sfc-run",
-    "dev-sfc-prepare": "node scripts/pre-dev-sfc.js || npm run build-all-cjs",
+    "dev-sfc": "run-s dev-prepare-cjs dev-sfc-run",
     "dev-sfc-serve": "vite packages/sfc-playground --host",
     "dev-sfc-run": "run-p \"dev compiler-sfc -f esm-browser\" \"dev vue -if esm-bundler-runtime\" \"dev vue -ipf esm-browser-runtime\" \"dev server-renderer -if esm-bundler\" dev-sfc-serve",
+    "dev-vapor": "run-s dev-prepare-cjs dev-vapor-run",
+    "dev-vapor-run": "run-p \"dev vue-vapor -if esm-bundler-runtime\" \"dev vue-vapor -ipf esm-browser-runtime\" dev-vapor-serve",
+    "dev-vapor-serve": "pnpm -C playground run dev",
     "serve": "serve",
     "open": "open http://localhost:3000/packages/template-explorer/local.html",
     "build-sfc-playground": "run-s build-all-cjs build-runtime-esm build-ssr-esm build-sfc-playground-self",
index 98124ac674b0462505a6bbe447cc8a6e338b98e7..1b6387150909cab5e9b5c04f9d728e67d0d6b04a 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "@vue/compiler-vapor",
-  "version": "0.0.0",
+  "version": "0.0.0-vapor",
   "description": "@vue/compiler-vapor",
   "main": "index.js",
   "module": "dist/compiler-vapor.esm-bundler.js",
diff --git a/packages/runtime-vapor/index.js b/packages/runtime-vapor/index.js
new file mode 100644 (file)
index 0000000..5eefe12
--- /dev/null
@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./dist/runtime-vapor.cjs.prod.js')
+} else {
+  module.exports = require('./dist/runtime-vapor.cjs.js')
+}
index a2f218cbf07755baebe92eadc543e3440f24297c..1e97e3bcef164c322967b82bf78084c93f3b9249 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "@vue/runtime-vapor",
-  "version": "0.0.0",
+  "version": "0.0.0-vapor",
   "description": "@vue/runtime-vapor",
   "main": "index.js",
   "module": "dist/runtime-vapor.esm-bundler.js",
index d6c95e4376c1fefe5286eeee915e30144c5fc448..8c315ecab82cd95bda3e05d30e6113769e36a7a9 100644 (file)
@@ -1,3 +1,40 @@
+// Core API ------------------------------------------------------------------
+
+export const version = __VERSION__
+export {
+  // core
+  reactive,
+  ref,
+  readonly,
+  // utilities
+  unref,
+  proxyRefs,
+  isRef,
+  toRef,
+  toValue,
+  toRefs,
+  isProxy,
+  isReactive,
+  isReadonly,
+  isShallow,
+  // advanced
+  customRef,
+  triggerRef,
+  shallowRef,
+  shallowReactive,
+  shallowReadonly,
+  markRaw,
+  toRaw,
+  // effect
+  effect,
+  stop,
+  ReactiveEffect,
+  // effect scope
+  effectScope,
+  EffectScope,
+  getCurrentScope,
+  onScopeDispose
+} from '@vue/reactivity'
 export * from './on'
 export * from './render'
 export * from './template'
diff --git a/packages/vue-vapor/LICENSE b/packages/vue-vapor/LICENSE
new file mode 100644 (file)
index 0000000..15f1f7e
--- /dev/null
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018-present, Yuxi (Evan) You
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/packages/vue-vapor/README.md b/packages/vue-vapor/README.md
new file mode 100644 (file)
index 0000000..ceb922d
--- /dev/null
@@ -0,0 +1 @@
+# @vue/vapor
diff --git a/packages/vue-vapor/index.js b/packages/vue-vapor/index.js
new file mode 100644 (file)
index 0000000..2625461
--- /dev/null
@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./dist/vue-vapor.cjs.prod.js')
+} else {
+  module.exports = require('./dist/vue-vapor.cjs.js')
+}
diff --git a/packages/vue-vapor/index.mjs b/packages/vue-vapor/index.mjs
new file mode 100644 (file)
index 0000000..8b43612
--- /dev/null
@@ -0,0 +1 @@
+export * from './index.js'
\ No newline at end of file
diff --git a/packages/vue-vapor/package.json b/packages/vue-vapor/package.json
new file mode 100644 (file)
index 0000000..cc6d40a
--- /dev/null
@@ -0,0 +1,59 @@
+{
+  "name": "@vue/vapor",
+  "version": "0.0.0-vapor",
+  "description": "The progressive JavaScript framework for building modern web UI.",
+  "main": "index.js",
+  "module": "dist/vue-vapor.runtime.esm-bundler.js",
+  "types": "dist/vue-vapor.d.ts",
+  "unpkg": "dist/vue-vapor.global.js",
+  "jsdelivr": "dist/vue-vapor.global.js",
+  "files": [
+    "index.js",
+    "index.mjs",
+    "dist"
+  ],
+  "exports": {
+    ".": {
+      "import": {
+        "types": "./dist/vue-vapor.d.mts",
+        "node": "./index.mjs",
+        "default": "./dist/vue-vapor.runtime.esm-bundler.js"
+      },
+      "require": {
+        "types": "./dist/vue-vapor.d.ts",
+        "default": "./index.js"
+      }
+    },
+    "./dist/*": "./dist/*",
+    "./package.json": "./package.json"
+  },
+  "buildOptions": {
+    "name": "VueVapor",
+    "formats": [
+      "esm-bundler",
+      "esm-bundler-runtime",
+      "cjs",
+      "global",
+      "global-runtime",
+      "esm-browser",
+      "esm-browser-runtime"
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vuejs/core-vapor.git"
+  },
+  "keywords": [
+    "vue"
+  ],
+  "author": "Evan You",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vuejs/core-vapor/issues"
+  },
+  "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/vapor#readme",
+  "dependencies": {
+    "@vue/runtime-vapor": "workspace:*",
+    "@vue/compiler-vapor": "workspace:*"
+  }
+}
diff --git a/packages/vue-vapor/src/dev.ts b/packages/vue-vapor/src/dev.ts
new file mode 100644 (file)
index 0000000..79f233e
--- /dev/null
@@ -0,0 +1,15 @@
+import { initCustomFormatter } from '@vue/runtime-dom'
+
+export function initDev() {
+  if (__BROWSER__) {
+    /* istanbul ignore if */
+    if (!__ESM_BUNDLER__) {
+      console.info(
+        `You are running a development build of Vue.\n` +
+          `Make sure to use the production build (*.prod.js) when deploying for production.`
+      )
+    }
+
+    initCustomFormatter()
+  }
+}
diff --git a/packages/vue-vapor/src/index.ts b/packages/vue-vapor/src/index.ts
new file mode 100644 (file)
index 0000000..6c963db
--- /dev/null
@@ -0,0 +1,12 @@
+// This entry is the "full-build" that includes both the runtime
+// and the compiler, and supports on-the-fly compilation of the template option.
+import { initDev } from './dev'
+
+if (__DEV__) {
+  initDev()
+}
+
+// TODO register compiler
+
+export { compile } from '@vue/compiler-vapor'
+export * from '@vue/runtime-vapor'
diff --git a/packages/vue-vapor/src/runtime.ts b/packages/vue-vapor/src/runtime.ts
new file mode 100644 (file)
index 0000000..753b4b5
--- /dev/null
@@ -0,0 +1,26 @@
+// This entry exports the runtime only, and is built as
+// `dist/vue.esm-bundler.js` which is used by default for bundlers.
+import { initDev } from './dev'
+// TODO implement warn
+// import { warn } from '@vue/runtime-vapor'
+
+if (__DEV__) {
+  initDev()
+}
+
+export * from '@vue/runtime-vapor'
+
+export const compile = () => {
+  if (__DEV__) {
+    console.warn(
+      `Runtime compilation is not supported in this build of Vue.` +
+        (__ESM_BUNDLER__
+          ? ` Configure your bundler to alias "vue" to "vue/dist/vue-vapor.esm-bundler.js".`
+          : __ESM_BROWSER__
+            ? ` Use "vue-vapor.esm-browser.js" instead.`
+            : __GLOBAL__
+              ? ` Use "vue-vapor.global.js" instead.`
+              : ``) /* should not happen */
+    )
+  }
+}
diff --git a/packages/vue/compiler-vapor/index.d.mts b/packages/vue/compiler-vapor/index.d.mts
deleted file mode 100644 (file)
index 0afc1e9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-export * from '@vue/compiler-vapor'
diff --git a/packages/vue/compiler-vapor/index.d.ts b/packages/vue/compiler-vapor/index.d.ts
deleted file mode 100644 (file)
index 0afc1e9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-export * from '@vue/compiler-vapor'
diff --git a/packages/vue/compiler-vapor/index.js b/packages/vue/compiler-vapor/index.js
deleted file mode 100644 (file)
index 228123f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('@vue/compiler-vapor')
diff --git a/packages/vue/compiler-vapor/index.mjs b/packages/vue/compiler-vapor/index.mjs
deleted file mode 100644 (file)
index 0afc1e9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-export * from '@vue/compiler-vapor'
diff --git a/packages/vue/compiler-vapor/package.json b/packages/vue/compiler-vapor/package.json
deleted file mode 100644 (file)
index 4cf44a4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "main": "index.js",
-  "module": "index.mjs"
-}
index be8d69fd3be1baf8ed4a9b29d20bfc92a7171c1e..19d57a8c69ce999941cfd941f0ff8244f6e3c529 100644 (file)
         "default": "./vapor/index.js"
       }
     },
-    "./compiler-vapor": {
-      "import": {
-        "types": "./compiler-vapor/index.d.mts",
-        "default": "./compiler-vapor/index.mjs"
-      },
-      "require": {
-        "types": "./compiler-vapor/index.d.ts",
-        "default": "./compiler-vapor/index.js"
-      }
-    },
     "./jsx-runtime": {
       "types": "./jsx-runtime/index.d.ts",
       "import": "./jsx-runtime/index.mjs",
   "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/vue#readme",
   "dependencies": {
     "@vue/shared": "workspace:*",
+    "@vue/vapor": "workspace:*",
     "@vue/compiler-dom": "workspace:*",
     "@vue/runtime-dom": "workspace:*",
-    "@vue/runtime-vapor": "workspace:*",
-    "@vue/compiler-vapor": "workspace:*",
     "@vue/compiler-sfc": "workspace:*",
     "@vue/server-renderer": "workspace:*"
   },
index bddf2c71a4594089ffba2471d60f64faf7df9e5b..658617456b00cd61c69aa86141d56b917bc9de10 100644 (file)
@@ -1 +1 @@
-export * from '@vue/runtime-vapor'
+export * from '@vue/vapor'
index bddf2c71a4594089ffba2471d60f64faf7df9e5b..658617456b00cd61c69aa86141d56b917bc9de10 100644 (file)
@@ -1 +1 @@
-export * from '@vue/runtime-vapor'
+export * from '@vue/vapor'
index 684bafc39bc616ede85475ad8df7b7e623bc7a02..a6b4e3cdaf438120dfa4adf61fe21fa6174a9d07 100644 (file)
@@ -1 +1 @@
-module.exports = require('@vue/runtime-vapor')
+module.exports = require('@vue/vapor')
index bddf2c71a4594089ffba2471d60f64faf7df9e5b..658617456b00cd61c69aa86141d56b917bc9de10 100644 (file)
@@ -1 +1 @@
-export * from '@vue/runtime-vapor'
+export * from '@vue/vapor'
index ef2662c4766f1f3898b9f8da257a5cb0a28c69b4..5ced0741e9f1931269fd62e2e879cdcaa57a36e1 100644 (file)
@@ -413,21 +413,18 @@ importers:
       '@vue/compiler-sfc':
         specifier: workspace:*
         version: link:../compiler-sfc
-      '@vue/compiler-vapor':
-        specifier: workspace:*
-        version: link:../compiler-vapor
       '@vue/runtime-dom':
         specifier: workspace:*
         version: link:../runtime-dom
-      '@vue/runtime-vapor':
-        specifier: workspace:*
-        version: link:../runtime-vapor
       '@vue/server-renderer':
         specifier: workspace:*
         version: link:../server-renderer
       '@vue/shared':
         specifier: workspace:*
         version: link:../shared
+      '@vue/vapor':
+        specifier: workspace:*
+        version: link:../vue-vapor
       typescript:
         specifier: '*'
         version: 5.2.2
@@ -447,6 +444,15 @@ importers:
         specifier: workspace:*
         version: link:../vue
 
+  packages/vue-vapor:
+    dependencies:
+      '@vue/compiler-vapor':
+        specifier: workspace:*
+        version: link:../compiler-vapor
+      '@vue/runtime-vapor':
+        specifier: workspace:*
+        version: link:../runtime-vapor
+
   playground:
     dependencies:
       vue:
index d8dfc98a3915bb205cd67fad9fad07f53991fc93..63d62b7304ffa93bcfc223b11f4c4c1d0d607475 100644 (file)
@@ -27,6 +27,7 @@ const consolidatePkg = require('@vue/consolidate/package.json')
 const packagesDir = path.resolve(__dirname, 'packages')
 const packageDir = path.resolve(packagesDir, process.env.TARGET)
 
+/** @param {string} p */
 const resolve = p => path.resolve(packageDir, p)
 const pkg = require(resolve(`package.json`))
 const packageOptions = pkg.buildOptions || {}
@@ -34,6 +35,16 @@ const name = packageOptions.filename || path.basename(packageDir)
 
 const [enumPlugin, enumDefines] = constEnum()
 
+/**
+ * @typedef { Omit<T, K> & Required<Pick<T, K>> } MarkRequired
+ * @template T
+ * @template {keyof T} K
+ */
+
+/** @typedef {import('rollup').ModuleFormat} Format */
+/** @typedef {MarkRequired<import('rollup').OutputOptions, 'file'>} Output */
+
+/** @type {Record<string, Output>} */
 const outputConfigs = {
   'esm-bundler': {
     file: resolve(`dist/${name}.esm-bundler.js`),
@@ -71,24 +82,37 @@ const inlineFormats = process.env.FORMATS && process.env.FORMATS.split(',')
 const packageFormats = inlineFormats || packageOptions.formats || defaultFormats
 const packageConfigs = process.env.PROD_ONLY
   ? []
-  : packageFormats.map(format => createConfig(format, outputConfigs[format]))
+  : packageFormats.map(
+      /** @param {Format} format */
+      format => createConfig(format, outputConfigs[format])
+    )
 
 if (process.env.NODE_ENV === 'production') {
-  packageFormats.forEach(format => {
-    if (packageOptions.prod === false) {
-      return
-    }
-    if (format === 'cjs') {
-      packageConfigs.push(createProductionConfig(format))
-    }
-    if (/^(global|esm-browser)(-runtime)?/.test(format)) {
-      packageConfigs.push(createMinifiedConfig(format))
+  packageFormats.forEach(
+    /** @param {Format} format */
+    format => {
+      if (packageOptions.prod === false) {
+        return
+      }
+      if (format === 'cjs') {
+        packageConfigs.push(createProductionConfig(format))
+      }
+      if (/^(global|esm-browser)(-runtime)?/.test(format)) {
+        packageConfigs.push(createMinifiedConfig(format))
+      }
     }
-  })
+  )
 }
 
 export default packageConfigs
 
+/**
+ *
+ * @param {Format} format
+ * @param {Output} output
+ * @param {import('rollup').Plugin[]} plugins
+ * @returns {import('rollup').RollupOptions}
+ */
 function createConfig(format, output, plugins = []) {
   if (!output) {
     console.log(pico.yellow(`invalid format: "${format}"`))
@@ -120,18 +144,53 @@ function createConfig(format, output, plugins = []) {
     output.name = packageOptions.name
   }
 
-  let entryFile = /runtime$/.test(format) ? `src/runtime.ts` : `src/index.ts`
+  let entryFile = /\bruntime\b/.test(format) ? `runtime.ts` : `index.ts`
 
   // the compat build needs both default AND named exports. This will cause
   // Rollup to complain for non-ESM targets, so we use separate entries for
   // esm vs. non-esm builds.
   if (isCompatPackage && (isBrowserESMBuild || isBundlerESMBuild)) {
-    entryFile = /runtime$/.test(format)
-      ? `src/esm-runtime.ts`
-      : `src/esm-index.ts`
+    entryFile = `esm-${entryFile}`
+  }
+  entryFile = 'src/' + entryFile
+
+  return {
+    input: resolve(entryFile),
+    // Global and Browser ESM builds inlines everything so that they can be
+    // used alone.
+    external: resolveExternal(),
+    plugins: [
+      json({
+        namedExports: false
+      }),
+      alias({
+        entries
+      }),
+      enumPlugin,
+      ...resolveReplace(),
+      esbuild({
+        tsconfig: path.resolve(__dirname, 'tsconfig.json'),
+        sourceMap: output.sourcemap,
+        minify: false,
+        target: isServerRenderer || isNodeBuild ? 'es2019' : 'es2015',
+        define: resolveDefine()
+      }),
+      ...resolveNodePlugins(),
+      ...plugins
+    ],
+    output,
+    onwarn(msg, warn) {
+      if (!/Circular/.test(msg.message)) {
+        warn(msg)
+      }
+    },
+    treeshake: {
+      moduleSideEffects: false
+    }
   }
 
   function resolveDefine() {
+    /** @type {Record<string, string>} */
     const replacements = {
       __COMMIT__: `"${process.env.COMMIT}"`,
       __VERSION__: `"${masterVersion}"`,
@@ -170,7 +229,7 @@ function createConfig(format, output, plugins = []) {
     //__RUNTIME_COMPILE__=true pnpm build runtime-core
     Object.keys(replacements).forEach(key => {
       if (key in process.env) {
-        replacements[key] = process.env[key]
+        replacements[key] = /** @type {string} */ (process.env[key])
       }
     })
     return replacements
@@ -240,6 +299,7 @@ function createConfig(format, output, plugins = []) {
   function resolveNodePlugins() {
     // we are bundling forked consolidate.js in compiler-sfc which dynamically
     // requires a ton of template engines which should be ignored.
+    /** @type { string[] } */
     let cjsIgnores = []
     if (
       pkg.name === '@vue/compiler-sfc' ||
@@ -272,56 +332,27 @@ function createConfig(format, output, plugins = []) {
 
     return nodePlugins
   }
-
-  return {
-    input: resolve(entryFile),
-    // Global and Browser ESM builds inlines everything so that they can be
-    // used alone.
-    external: resolveExternal(),
-    plugins: [
-      json({
-        namedExports: false
-      }),
-      alias({
-        entries
-      }),
-      enumPlugin,
-      ...resolveReplace(),
-      esbuild({
-        tsconfig: path.resolve(__dirname, 'tsconfig.json'),
-        sourceMap: output.sourcemap,
-        minify: false,
-        target: isServerRenderer || isNodeBuild ? 'es2019' : 'es2015',
-        define: resolveDefine()
-      }),
-      ...resolveNodePlugins(),
-      ...plugins
-    ],
-    output,
-    onwarn: (msg, warn) => {
-      if (!/Circular/.test(msg)) {
-        warn(msg)
-      }
-    },
-    treeshake: {
-      moduleSideEffects: false
-    }
-  }
 }
 
+/**
+ * @param {Format} format
+ */
 function createProductionConfig(format) {
   return createConfig(format, {
-    file: resolve(`dist/${name}.${format}.prod.js`),
-    format: outputConfigs[format].format
+    ...outputConfigs[format],
+    file: resolve(`dist/${name}.${format}.prod.js`)
   })
 }
 
+/**
+ * @param {Format} format
+ */
 function createMinifiedConfig(format) {
   return createConfig(
     format,
     {
-      file: outputConfigs[format].file.replace(/\.js$/, '.prod.js'),
-      format: outputConfigs[format].format
+      ...outputConfigs[format],
+      file: outputConfigs[format].file.replace(/\.js$/, '.prod.js')
     },
     [
       terser({
index ec5f9c674cd44743bc9d361bddb78984b5bbe0fc..33c1a84a70727eb8c98f1e3097f755f2a6003f1c 100644 (file)
@@ -14,11 +14,10 @@ import { polyfillNode } from 'esbuild-plugin-polyfill-node'
 const require = createRequire(import.meta.url)
 const __dirname = dirname(fileURLToPath(import.meta.url))
 const args = minimist(process.argv.slice(2))
-const target = args._[0] || 'vue'
+const targets = args._ || ['vue']
 const format = args.f || 'global'
 const prod = args.p || false
 const inlineDeps = args.i || args.inline
-const pkg = require(`../packages/${target}/package.json`)
 
 // resolve output
 const outputFormat = format.startsWith('global')
@@ -31,99 +30,102 @@ const postfix = format.endsWith('-runtime')
   ? `runtime.${format.replace(/-runtime$/, '')}`
   : format
 
-const outfile = resolve(
-  __dirname,
-  `../packages/${target}/dist/${
-    target === 'vue-compat' ? `vue` : target
-  }.${postfix}.${prod ? `prod.` : ``}js`
-)
-const relativeOutfile = relative(process.cwd(), outfile)
+for (const target of targets) {
+  const pkg = require(`../packages/${target}/package.json`)
+  const outfile = resolve(
+    __dirname,
+    `../packages/${target}/dist/${
+      target === 'vue-compat' ? `vue` : target
+    }.${postfix}.${prod ? `prod.` : ``}js`
+  )
+  const relativeOutfile = relative(process.cwd(), outfile)
 
-// resolve externals
-// TODO this logic is largely duplicated from rollup.config.js
-let external = []
-if (!inlineDeps) {
-  // cjs & esm-bundler: external all deps
-  if (format === 'cjs' || format.includes('esm-bundler')) {
-    external = [
-      ...external,
-      ...Object.keys(pkg.dependencies || {}),
-      ...Object.keys(pkg.peerDependencies || {}),
-      // for @vue/compiler-sfc / server-renderer
-      'path',
-      'url',
-      'stream'
-    ]
-  }
+  // resolve externals
+  // TODO this logic is largely duplicated from rollup.config.js
+  let external = []
+  if (!inlineDeps) {
+    // cjs & esm-bundler: external all deps
+    if (format === 'cjs' || format.includes('esm-bundler')) {
+      external = [
+        ...external,
+        ...Object.keys(pkg.dependencies || {}),
+        ...Object.keys(pkg.peerDependencies || {}),
+        // for @vue/compiler-sfc / server-renderer
+        'path',
+        'url',
+        'stream'
+      ]
+    }
 
-  if (target === 'compiler-sfc') {
-    const consolidatePkgPath = require.resolve(
-      '@vue/consolidate/package.json',
-      {
-        paths: [resolve(__dirname, `../packages/${target}/`)]
-      }
-    )
-    const consolidateDeps = Object.keys(
-      require(consolidatePkgPath).devDependencies
-    )
-    external = [
-      ...external,
-      ...consolidateDeps,
-      'fs',
-      'vm',
-      'crypto',
-      'react-dom/server',
-      'teacup/lib/express',
-      'arc-templates/dist/es5',
-      'then-pug',
-      'then-jade'
-    ]
+    if (target === 'compiler-sfc') {
+      const consolidatePkgPath = require.resolve(
+        '@vue/consolidate/package.json',
+        {
+          paths: [resolve(__dirname, `../packages/${target}/`)]
+        }
+      )
+      const consolidateDeps = Object.keys(
+        require(consolidatePkgPath).devDependencies
+      )
+      external = [
+        ...external,
+        ...consolidateDeps,
+        'fs',
+        'vm',
+        'crypto',
+        'react-dom/server',
+        'teacup/lib/express',
+        'arc-templates/dist/es5',
+        'then-pug',
+        'then-jade'
+      ]
+    }
   }
-}
 
-const plugins = [
-  {
-    name: 'log-rebuild',
-    setup(build) {
-      build.onEnd(() => {
-        console.log(`built: ${relativeOutfile}`)
-      })
+  const plugins = [
+    {
+      name: 'log-rebuild',
+      setup(build) {
+        build.onEnd(() => {
+          console.log(`built: ${relativeOutfile}`)
+        })
+      }
     }
+  ]
+
+  if (format !== 'cjs' && pkg.buildOptions?.enableNonBrowserBranches) {
+    plugins.push(polyfillNode())
   }
-]
 
-if (format !== 'cjs' && pkg.buildOptions?.enableNonBrowserBranches) {
-  plugins.push(polyfillNode())
+  esbuild
+    .context({
+      entryPoints: [resolve(__dirname, `../packages/${target}/src/index.ts`)],
+      outfile,
+      bundle: true,
+      external,
+      sourcemap: true,
+      format: outputFormat,
+      globalName: pkg.buildOptions?.name,
+      platform: format === 'cjs' ? 'node' : 'browser',
+      plugins,
+      define: {
+        __COMMIT__: `"dev"`,
+        __VERSION__: `"${pkg.version}"`,
+        __DEV__: prod ? `false` : `true`,
+        __TEST__: `false`,
+        __BROWSER__: String(
+          format !== 'cjs' && !pkg.buildOptions?.enableNonBrowserBranches
+        ),
+        __GLOBAL__: String(format === 'global'),
+        __ESM_BUNDLER__: String(format.includes('esm-bundler')),
+        __ESM_BROWSER__: String(format.includes('esm-browser')),
+        __NODE_JS__: String(format === 'cjs'),
+        __SSR__: String(format === 'cjs' || format.includes('esm-bundler')),
+        __COMPAT__: String(target === 'vue-compat'),
+        __FEATURE_SUSPENSE__: `true`,
+        __FEATURE_OPTIONS_API__: `true`,
+        __FEATURE_PROD_DEVTOOLS__: `false`
+      }
+    })
+    .then(ctx => ctx.watch())
 }
-
-esbuild
-  .context({
-    entryPoints: [resolve(__dirname, `../packages/${target}/src/index.ts`)],
-    outfile,
-    bundle: true,
-    external,
-    sourcemap: true,
-    format: outputFormat,
-    globalName: pkg.buildOptions?.name,
-    platform: format === 'cjs' ? 'node' : 'browser',
-    plugins,
-    define: {
-      __COMMIT__: `"dev"`,
-      __VERSION__: `"${pkg.version}"`,
-      __DEV__: prod ? `false` : `true`,
-      __TEST__: `false`,
-      __BROWSER__: String(
-        format !== 'cjs' && !pkg.buildOptions?.enableNonBrowserBranches
-      ),
-      __GLOBAL__: String(format === 'global'),
-      __ESM_BUNDLER__: String(format.includes('esm-bundler')),
-      __ESM_BROWSER__: String(format.includes('esm-browser')),
-      __NODE_JS__: String(format === 'cjs'),
-      __SSR__: String(format === 'cjs' || format.includes('esm-bundler')),
-      __COMPAT__: String(target === 'vue-compat'),
-      __FEATURE_SUSPENSE__: `true`,
-      __FEATURE_OPTIONS_API__: `true`,
-      __FEATURE_PROD_DEVTOOLS__: `false`
-    }
-  })
-  .then(ctx => ctx.watch())
similarity index 95%
rename from scripts/pre-dev-sfc.js
rename to scripts/prepare-cjs.js
index b9b3a534460e46e535ccb94026dddfa238c15a60..467875ea8db2bb39726adc11a2552ee8e6416cf8 100644 (file)
@@ -6,6 +6,7 @@ const packagesToCheck = [
   'compiler-core',
   'compiler-dom',
   'compiler-ssr',
+  'compiler-vapor',
   'reactivity-transform',
   'shared'
 ]
index 7c96136bc58ce57e0ab55cc7181bf877961888eb..b91edb79782133381be3353d69bbc167487cdb92 100644 (file)
@@ -8,7 +8,9 @@ import { brotliCompressSync, gzipSync } from 'node:zlib'
 
 const sizeDir = path.resolve('temp/size')
 const vue = path.resolve('./packages/vue/dist/vue.runtime.esm-bundler.js')
-const vapor = path.resolve('./packages/vue/vapor/index.mjs')
+const vapor = path.resolve(
+  './packages/vue-vapor/dist/vue-vapor.runtime.esm-bundler.js'
+)
 
 interface Preset {
   name: string
@@ -24,6 +26,7 @@ const presets: Preset[] = [
     imports: ['defineCustomElement'],
     from: vue
   },
+  { name: 'vapor', imports: '*', from: vapor },
   {
     name: 'overall',
     imports: [
@@ -35,8 +38,7 @@ const presets: Preset[] = [
       'Suspense'
     ],
     from: vue
-  },
-  { name: 'vapor', imports: '*', from: vapor }
+  }
 ]
 
 main()
index 954103c0f2f66d05033a949956d1bb0e4006df68..c3be791568814d1553436033dedd17dd74190a6c 100644 (file)
@@ -10,6 +10,7 @@
     "packages/runtime-test",
     "packages/template-explorer",
     "packages/sfc-playground",
-    "packages/dts-test"
+    "packages/dts-test",
+    "playground"
   ]
 }
index 1864a3e8e0e565bb39da0399aecdbdd2d8de6b18..c1354dfa2868035878227b9986e939d27afbfa7d 100644 (file)
@@ -23,6 +23,7 @@
     "rootDir": ".",
     "paths": {
       "@vue/compat": ["packages/vue-compat/src"],
+      "@vue/vapor": ["packages/vue-vapor/src"],
       "@vue/*": ["packages/*/src"],
       "vue": ["packages/vue/src"]
     }