build: make @vue/shared public

This avoids it being inlined multiple times in esm bundler builds
This commit is contained in:
Evan You 2020-02-29 22:04:42 -05:00
parent e1660f4338
commit bcb2a9b4a6
18 changed files with 88 additions and 68 deletions

View File

@ -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). 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. - `shared`: Internal utilities shared across multiple packages (especially environment-agnostic utils used by both runtime and compiler packages).
- **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 */
}
```
- `vue`: The public facing "full build" which includes both the runtime AND the compiler. - `vue`: The public facing "full build" which includes both the runtime AND the compiler.

View File

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

View File

@ -18,7 +18,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/vuejs/vue.git" "url": "git+https://github.com/vuejs/vue-next.git"
}, },
"keywords": [ "keywords": [
"vue" "vue"
@ -26,10 +26,11 @@
"author": "Evan You", "author": "Evan You",
"license": "MIT", "license": "MIT",
"bugs": { "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": { "dependencies": {
"@vue/shared": "3.0.0-alpha.7",
"@babel/parser": "^7.8.6", "@babel/parser": "^7.8.6",
"@babel/types": "^7.8.6", "@babel/types": "^7.8.6",
"estree-walker": "^0.8.1", "estree-walker": "^0.8.1",

View File

@ -50,12 +50,4 @@ export {
} from './transforms/vSlot' } from './transforms/vSlot'
export { resolveComponentType, buildProps } from './transforms/transformElement' export { resolveComponentType, buildProps } from './transforms/transformElement'
export { processSlotOutlet } from './transforms/transformSlotOutlet' export { processSlotOutlet } from './transforms/transformSlotOutlet'
export { generateCodeFrame } from '@vue/shared'
// 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 }

View File

@ -22,7 +22,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/vuejs/vue.git" "url": "git+https://github.com/vuejs/vue-next.git"
}, },
"keywords": [ "keywords": [
"vue" "vue"
@ -30,10 +30,11 @@
"author": "Evan You", "author": "Evan You",
"license": "MIT", "license": "MIT",
"bugs": { "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": { "dependencies": {
"@vue/shared": "3.0.0-alpha.7",
"@vue/compiler-core": "3.0.0-alpha.7" "@vue/compiler-core": "3.0.0-alpha.7"
} }
} }

View File

@ -15,7 +15,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/vuejs/vue.git" "url": "git+https://github.com/vuejs/vue-next.git"
}, },
"keywords": [ "keywords": [
"vue" "vue"
@ -23,13 +23,14 @@
"author": "Evan You", "author": "Evan You",
"license": "MIT", "license": "MIT",
"bugs": { "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": { "peerDependencies": {
"vue": "3.0.0-alpha.7" "vue": "3.0.0-alpha.7"
}, },
"dependencies": { "dependencies": {
"@vue/shared": "3.0.0-alpha.7",
"@vue/compiler-core": "3.0.0-alpha.7", "@vue/compiler-core": "3.0.0-alpha.7",
"@vue/compiler-dom": "3.0.0-alpha.7", "@vue/compiler-dom": "3.0.0-alpha.7",
"consolidate": "^0.15.1", "consolidate": "^0.15.1",

View File

@ -15,7 +15,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/vuejs/vue.git" "url": "git+https://github.com/vuejs/vue-next.git"
}, },
"keywords": [ "keywords": [
"vue" "vue"
@ -23,10 +23,11 @@
"author": "Evan You", "author": "Evan You",
"license": "MIT", "license": "MIT",
"bugs": { "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": { "dependencies": {
"@vue/shared": "3.0.0-alpha.7",
"@vue/compiler-dom": "3.0.0-alpha.7" "@vue/compiler-dom": "3.0.0-alpha.7"
} }
} }

View File

@ -13,7 +13,7 @@
"sideEffects": false, "sideEffects": false,
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/vuejs/vue.git" "url": "git+https://github.com/vuejs/vue-next.git"
}, },
"buildOptions": { "buildOptions": {
"name": "VueReactivity", "name": "VueReactivity",
@ -30,7 +30,10 @@
"author": "Evan You", "author": "Evan You",
"license": "MIT", "license": "MIT",
"bugs": { "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"
}
} }

View File

@ -19,7 +19,7 @@
"sideEffects": false, "sideEffects": false,
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/vuejs/vue.git" "url": "git+https://github.com/vuejs/vue-next.git"
}, },
"keywords": [ "keywords": [
"vue" "vue"
@ -27,10 +27,11 @@
"author": "Evan You", "author": "Evan You",
"license": "MIT", "license": "MIT",
"bugs": { "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": { "dependencies": {
"@vue/shared": "3.0.0-alpha.7",
"@vue/reactivity": "3.0.0-alpha.7" "@vue/reactivity": "3.0.0-alpha.7"
} }
} }

View File

@ -101,15 +101,7 @@ export {
createCommentVNode, createCommentVNode,
createStaticVNode createStaticVNode
} from './vnode' } from './vnode'
// Since @vue/shared is inlined into final builds, export { toDisplayString, camelize } from '@vue/shared'
// 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
// For integration with runtime compiler // For integration with runtime compiler
export { registerRuntimeCompiler } from './component' export { registerRuntimeCompiler } from './component'

View File

@ -25,7 +25,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/vuejs/vue.git" "url": "git+https://github.com/vuejs/vue-next.git"
}, },
"keywords": [ "keywords": [
"vue" "vue"
@ -33,10 +33,11 @@
"author": "Evan You", "author": "Evan You",
"license": "MIT", "license": "MIT",
"bugs": { "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": { "dependencies": {
"@vue/shared": "3.0.0-alpha.7",
"@vue/runtime-core": "3.0.0-alpha.7", "@vue/runtime-core": "3.0.0-alpha.7",
"csstype": "^2.6.8" "csstype": "^2.6.8"
} }

View File

@ -12,7 +12,7 @@
], ],
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/vuejs/vue.git" "url": "git+https://github.com/vuejs/vue-next.git"
}, },
"buildOptions": { "buildOptions": {
"name": "VueRuntimeTest", "name": "VueRuntimeTest",
@ -26,10 +26,11 @@
"author": "Evan You", "author": "Evan You",
"license": "MIT", "license": "MIT",
"bugs": { "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": { "dependencies": {
"@vue/shared": "3.0.0-alpha.7",
"@vue/runtime-core": "3.0.0-alpha.7" "@vue/runtime-core": "3.0.0-alpha.7"
} }
} }

View File

@ -15,7 +15,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/vuejs/vue.git" "url": "git+https://github.com/vuejs/vue-next.git"
}, },
"keywords": [ "keywords": [
"vue" "vue"
@ -23,13 +23,14 @@
"author": "Evan You", "author": "Evan You",
"license": "MIT", "license": "MIT",
"bugs": { "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": { "peerDependencies": {
"vue": "3.0.0-alpha.7" "vue": "3.0.0-alpha.7"
}, },
"dependencies": { "dependencies": {
"@vue/shared": "3.0.0-alpha.7",
"@vue/compiler-ssr": "3.0.0-alpha.7" "@vue/compiler-ssr": "3.0.0-alpha.7"
} }
} }

View File

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

7
packages/shared/index.js Normal file
View File

@ -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')
}

View File

@ -1,5 +1,31 @@
{ {
"name": "@vue/shared", "name": "@vue/shared",
"version": "3.0.0-alpha.7", "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"
} }

View File

@ -24,7 +24,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/vuejs/vue.git" "url": "git+https://github.com/vuejs/vue-next.git"
}, },
"keywords": [ "keywords": [
"vue" "vue"
@ -32,10 +32,11 @@
"author": "Evan You", "author": "Evan You",
"license": "MIT", "license": "MIT",
"bugs": { "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": { "dependencies": {
"@vue/shared": "3.0.0-alpha.7",
"@vue/compiler-dom": "3.0.0-alpha.7", "@vue/compiler-dom": "3.0.0-alpha.7",
"@vue/runtime-dom": "3.0.0-alpha.7" "@vue/runtime-dom": "3.0.0-alpha.7"
}, },

View File

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