浏览代码

build: make @vue/shared public

This avoids it being inlined multiple times in esm bundler builds
Evan You 6 年之前
父节点
当前提交
bcb2a9b4a6

+ 1 - 10
.github/contributing.md

@@ -185,16 +185,7 @@ This repository employs a [monorepo](https://en.wikipedia.org/wiki/Monorepo) set
 
   A [live version](https://vue-next-template-explorer.netlify.com) of the template explorer is also available, which can be used for providing reproductions for compiler bugs. You can also pick the deployment for a specific commit from the [deploy logs](https://app.netlify.com/sites/vue-next-template-explorer/deploys).
 
-- `shared`: **Private.** Utilities shared across multiple packages (especially by both runtime and compiler packages). This package is private and not published. Instead, it is **inlined** into the package that imports it during build.
-
-  - **Note:** if re-exporting a function from `@vue/shared` as a public API, it is necessary to re-define its type before exporting so that the final `d.ts` doesn't attempt to import `@vue/shared`, e.g.:
-
-    ```ts
-    import { foo } from '@vue/shared'
-    export const publicFoo = foo as {
-      /* re-define type */
-    }
-    ```
+- `shared`: Internal utilities shared across multiple packages (especially environment-agnostic utils used by both runtime and compiler packages).
 
 - `vue`: The public facing "full build" which includes both the runtime AND the compiler.
 

+ 1 - 1
package.json

@@ -10,7 +10,7 @@
     "size": "node scripts/build.js vue runtime-dom size-check -p -f global",
     "lint": "prettier --write --parser typescript \"packages/**/*.ts?(x)\"",
     "test": "node scripts/build.js vue -f global -d && jest",
-    "test-dts": "node scripts/build.js reactivity runtime-core runtime-dom -dt -f esm-bundler && tsd",
+    "test-dts": "node scripts/build.js shared reactivity runtime-core runtime-dom -dt -f esm-bundler && tsd",
     "release": "node scripts/release.js",
     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
     "dev-compiler": "npm-run-all --parallel \"dev template-explorer\" serve",

+ 4 - 3
packages/compiler-core/package.json

@@ -18,7 +18,7 @@
   },
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/vuejs/vue.git"
+    "url": "git+https://github.com/vuejs/vue-next.git"
   },
   "keywords": [
     "vue"
@@ -26,10 +26,11 @@
   "author": "Evan You",
   "license": "MIT",
   "bugs": {
-    "url": "https://github.com/vuejs/vue/issues"
+    "url": "https://github.com/vuejs/vue-next/issues"
   },
-  "homepage": "https://github.com/vuejs/vue/tree/dev/packages/compiler-core#readme",
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-core#readme",
   "dependencies": {
+    "@vue/shared": "3.0.0-alpha.7",
     "@babel/parser": "^7.8.6",
     "@babel/types": "^7.8.6",
     "estree-walker": "^0.8.1",

+ 1 - 9
packages/compiler-core/src/index.ts

@@ -50,12 +50,4 @@ export {
 } from './transforms/vSlot'
 export { resolveComponentType, buildProps } from './transforms/transformElement'
 export { processSlotOutlet } from './transforms/transformSlotOutlet'
-
-// utility, but need to rewrite typing to avoid dts relying on @vue/shared
-import { generateCodeFrame as _genCodeFrame } from '@vue/shared'
-const generateCodeFrame = _genCodeFrame as (
-  source: string,
-  start?: number,
-  end?: number
-) => string
-export { generateCodeFrame }
+export { generateCodeFrame } from '@vue/shared'

+ 4 - 3
packages/compiler-dom/package.json

@@ -22,7 +22,7 @@
   },
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/vuejs/vue.git"
+    "url": "git+https://github.com/vuejs/vue-next.git"
   },
   "keywords": [
     "vue"
@@ -30,10 +30,11 @@
   "author": "Evan You",
   "license": "MIT",
   "bugs": {
-    "url": "https://github.com/vuejs/vue/issues"
+    "url": "https://github.com/vuejs/vue-next/issues"
   },
-  "homepage": "https://github.com/vuejs/vue/tree/dev/packages/compiler-dom#readme",
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-dom#readme",
   "dependencies": {
+    "@vue/shared": "3.0.0-alpha.7",
     "@vue/compiler-core": "3.0.0-alpha.7"
   }
 }

+ 4 - 3
packages/compiler-sfc/package.json

@@ -15,7 +15,7 @@
   },
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/vuejs/vue.git"
+    "url": "git+https://github.com/vuejs/vue-next.git"
   },
   "keywords": [
     "vue"
@@ -23,13 +23,14 @@
   "author": "Evan You",
   "license": "MIT",
   "bugs": {
-    "url": "https://github.com/vuejs/vue/issues"
+    "url": "https://github.com/vuejs/vue-next/issues"
   },
-  "homepage": "https://github.com/vuejs/vue/tree/dev/packages/compiler-sfc#readme",
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-sfc#readme",
   "peerDependencies": {
     "vue": "3.0.0-alpha.7"
   },
   "dependencies": {
+    "@vue/shared": "3.0.0-alpha.7",
     "@vue/compiler-core": "3.0.0-alpha.7",
     "@vue/compiler-dom": "3.0.0-alpha.7",
     "consolidate": "^0.15.1",

+ 4 - 3
packages/compiler-ssr/package.json

@@ -15,7 +15,7 @@
   },
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/vuejs/vue.git"
+    "url": "git+https://github.com/vuejs/vue-next.git"
   },
   "keywords": [
     "vue"
@@ -23,10 +23,11 @@
   "author": "Evan You",
   "license": "MIT",
   "bugs": {
-    "url": "https://github.com/vuejs/vue/issues"
+    "url": "https://github.com/vuejs/vue-next/issues"
   },
-  "homepage": "https://github.com/vuejs/vue/tree/dev/packages/compiler-ssr#readme",
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-ssr#readme",
   "dependencies": {
+    "@vue/shared": "3.0.0-alpha.7",
     "@vue/compiler-dom": "3.0.0-alpha.7"
   }
 }

+ 6 - 3
packages/reactivity/package.json

@@ -13,7 +13,7 @@
   "sideEffects": false,
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/vuejs/vue.git"
+    "url": "git+https://github.com/vuejs/vue-next.git"
   },
   "buildOptions": {
     "name": "VueReactivity",
@@ -30,7 +30,10 @@
   "author": "Evan You",
   "license": "MIT",
   "bugs": {
-    "url": "https://github.com/vuejs/vue/issues"
+    "url": "https://github.com/vuejs/vue-next/issues"
   },
-  "homepage": "https://github.com/vuejs/vue/tree/dev/packages/reactivity#readme"
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/reactivity#readme",
+  "dependencies": {
+    "@vue/shared": "3.0.0-alpha.7"
+  }
 }

+ 4 - 3
packages/runtime-core/package.json

@@ -19,7 +19,7 @@
   "sideEffects": false,
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/vuejs/vue.git"
+    "url": "git+https://github.com/vuejs/vue-next.git"
   },
   "keywords": [
     "vue"
@@ -27,10 +27,11 @@
   "author": "Evan You",
   "license": "MIT",
   "bugs": {
-    "url": "https://github.com/vuejs/vue/issues"
+    "url": "https://github.com/vuejs/vue-next/issues"
   },
-  "homepage": "https://github.com/vuejs/vue/tree/dev/packages/runtime-core#readme",
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/runtime-core#readme",
   "dependencies": {
+    "@vue/shared": "3.0.0-alpha.7",
     "@vue/reactivity": "3.0.0-alpha.7"
   }
 }

+ 1 - 9
packages/runtime-core/src/index.ts

@@ -101,15 +101,7 @@ export {
   createCommentVNode,
   createStaticVNode
 } from './vnode'
-// Since @vue/shared is inlined into final builds,
-// when re-exporting from @vue/shared we need to avoid relying on their original
-// types so that the bundled d.ts does not attempt to import from it.
-import {
-  toDisplayString as _toDisplayString,
-  camelize as _camelize
-} from '@vue/shared'
-export const toDisplayString = _toDisplayString as (s: unknown) => string
-export const camelize = _camelize as (s: string) => string
+export { toDisplayString, camelize } from '@vue/shared'
 
 // For integration with runtime compiler
 export { registerRuntimeCompiler } from './component'

+ 4 - 3
packages/runtime-dom/package.json

@@ -25,7 +25,7 @@
   },
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/vuejs/vue.git"
+    "url": "git+https://github.com/vuejs/vue-next.git"
   },
   "keywords": [
     "vue"
@@ -33,10 +33,11 @@
   "author": "Evan You",
   "license": "MIT",
   "bugs": {
-    "url": "https://github.com/vuejs/vue/issues"
+    "url": "https://github.com/vuejs/vue-next/issues"
   },
-  "homepage": "https://github.com/vuejs/vue/tree/dev/packages/runtime-dom#readme",
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/runtime-dom#readme",
   "dependencies": {
+    "@vue/shared": "3.0.0-alpha.7",
     "@vue/runtime-core": "3.0.0-alpha.7",
     "csstype": "^2.6.8"
   }

+ 4 - 3
packages/runtime-test/package.json

@@ -12,7 +12,7 @@
   ],
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/vuejs/vue.git"
+    "url": "git+https://github.com/vuejs/vue-next.git"
   },
   "buildOptions": {
     "name": "VueRuntimeTest",
@@ -26,10 +26,11 @@
   "author": "Evan You",
   "license": "MIT",
   "bugs": {
-    "url": "https://github.com/vuejs/vue/issues"
+    "url": "https://github.com/vuejs/vue-next/issues"
   },
-  "homepage": "https://github.com/vuejs/vue/tree/dev/packages/runtime-test#readme",
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/runtime-test#readme",
   "dependencies": {
+    "@vue/shared": "3.0.0-alpha.7",
     "@vue/runtime-core": "3.0.0-alpha.7"
   }
 }

+ 4 - 3
packages/server-renderer/package.json

@@ -15,7 +15,7 @@
   },
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/vuejs/vue.git"
+    "url": "git+https://github.com/vuejs/vue-next.git"
   },
   "keywords": [
     "vue"
@@ -23,13 +23,14 @@
   "author": "Evan You",
   "license": "MIT",
   "bugs": {
-    "url": "https://github.com/vuejs/vue/issues"
+    "url": "https://github.com/vuejs/vue-next/issues"
   },
-  "homepage": "https://github.com/vuejs/vue/tree/dev/packages/server-renderer#readme",
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/server-renderer#readme",
   "peerDependencies": {
     "vue": "3.0.0-alpha.7"
   },
   "dependencies": {
+    "@vue/shared": "3.0.0-alpha.7",
     "@vue/compiler-ssr": "3.0.0-alpha.7"
   }
 }

+ 7 - 0
packages/shared/api-extractor.json

@@ -0,0 +1,7 @@
+{
+  "extends": "../../api-extractor.json",
+  "mainEntryPointFilePath": "./dist/packages/<unscopedPackageName>/src/index.d.ts",
+  "dtsRollup": {
+    "untrimmedFilePath": "./dist/<unscopedPackageName>.d.ts"
+  }
+}

+ 7 - 0
packages/shared/index.js

@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./dist/shared.cjs.prod.js')
+} else {
+  module.exports = require('./dist/shared.cjs.js')
+}

+ 27 - 1
packages/shared/package.json

@@ -1,5 +1,31 @@
 {
   "name": "@vue/shared",
   "version": "3.0.0-alpha.7",
-  "private": true
+  "description": "internal utils shared across @vue packages",
+  "main": "index.js",
+  "module": "dist/shared.esm-bundler.js",
+  "types": "dist/shared.d.ts",
+  "files": [
+    "index.js",
+    "dist"
+  ],
+  "buildOptions": {
+    "formats": [
+      "esm-bundler",
+      "cjs"
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vuejs/vue-next.git"
+  },
+  "keywords": [
+    "vue"
+  ],
+  "author": "Evan You",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vuejs/vue-next/issues"
+  },
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/shared#readme"
 }

+ 4 - 3
packages/vue/package.json

@@ -24,7 +24,7 @@
   },
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/vuejs/vue.git"
+    "url": "git+https://github.com/vuejs/vue-next.git"
   },
   "keywords": [
     "vue"
@@ -32,10 +32,11 @@
   "author": "Evan You",
   "license": "MIT",
   "bugs": {
-    "url": "https://github.com/vuejs/vue/issues"
+    "url": "https://github.com/vuejs/vue-next/issues"
   },
-  "homepage": "https://github.com/vuejs/vue/tree/dev/packages/vue#readme",
+  "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/vue#readme",
   "dependencies": {
+    "@vue/shared": "3.0.0-alpha.7",
     "@vue/compiler-dom": "3.0.0-alpha.7",
     "@vue/runtime-dom": "3.0.0-alpha.7"
   },

+ 1 - 8
rollup.config.js

@@ -1,4 +1,3 @@
-import fs from 'fs'
 import path from 'path'
 import ts from 'rollup-plugin-typescript2'
 import replace from '@rollup/plugin-replace'
@@ -16,10 +15,6 @@ const resolve = p => path.resolve(packageDir, p)
 const pkg = require(resolve(`package.json`))
 const packageOptions = pkg.buildOptions || {}
 
-const knownExternals = fs.readdirSync(packagesDir).filter(p => {
-  return p !== '@vue/shared'
-})
-
 // ensure TS checks only once for each build
 let hasTSChecked = false
 
@@ -112,9 +107,7 @@ function createConfig(format, output, plugins = []) {
     format === 'esm-bundler-runtime' ? `src/runtime.ts` : `src/index.ts`
 
   const external =
-    isGlobalBuild || isRawESMBuild
-      ? []
-      : knownExternals.concat(Object.keys(pkg.dependencies || []))
+    isGlobalBuild || isRawESMBuild ? [] : Object.keys(pkg.dependencies || {})
 
   const nodePlugins = packageOptions.enableNonBrowserBranches
     ? [