build: add runtime-global build for vue

This commit is contained in:
Evan You 2020-03-23 15:09:29 -04:00
parent f529dbde23
commit 4126a9dd51
3 changed files with 33 additions and 24 deletions

View File

@ -18,6 +18,7 @@
"esm-bundler-runtime", "esm-bundler-runtime",
"cjs", "cjs",
"global", "global",
"global-runtime",
"esm" "esm"
] ]
}, },

View File

@ -23,11 +23,6 @@ const outputConfigs = {
file: resolve(`dist/${name}.esm-bundler.js`), file: resolve(`dist/${name}.esm-bundler.js`),
format: `es` format: `es`
}, },
// main "vue" package only
'esm-bundler-runtime': {
file: resolve(`dist/${name}.runtime.esm-bundler.js`),
format: `es`
},
cjs: { cjs: {
file: resolve(`dist/${name}.cjs.js`), file: resolve(`dist/${name}.cjs.js`),
format: `cjs` format: `cjs`
@ -39,6 +34,15 @@ const outputConfigs = {
esm: { esm: {
file: resolve(`dist/${name}.esm.js`), file: resolve(`dist/${name}.esm.js`),
format: `es` format: `es`
},
// main "vue" package only
'esm-bundler-runtime': {
file: resolve(`dist/${name}.runtime.esm-bundler.js`),
format: `es`
},
'global-runtime': {
file: resolve(`dist/${name}.runtime.global.js`),
format: 'iife'
} }
} }
@ -54,7 +58,7 @@ if (process.env.NODE_ENV === 'production') {
if (format === 'cjs' && packageOptions.prod !== false) { if (format === 'cjs' && packageOptions.prod !== false) {
packageConfigs.push(createProductionConfig(format)) packageConfigs.push(createProductionConfig(format))
} }
if (format === 'global' || format === 'esm') { if (/global/.test(format) || format === 'esm') {
packageConfigs.push(createMinifiedConfig(format)) packageConfigs.push(createMinifiedConfig(format))
} }
}) })
@ -73,7 +77,7 @@ function createConfig(format, output, plugins = []) {
const isProductionBuild = const isProductionBuild =
process.env.__DEV__ === 'false' || /\.prod\.js$/.test(output.file) process.env.__DEV__ === 'false' || /\.prod\.js$/.test(output.file)
const isGlobalBuild = format === 'global' const isGlobalBuild = /global/.test(format)
const isRawESMBuild = format === 'esm' const isRawESMBuild = format === 'esm'
const isNodeBuild = format === 'cjs' const isNodeBuild = format === 'cjs'
const isBundlerESMBuild = /esm-bundler/.test(format) const isBundlerESMBuild = /esm-bundler/.test(format)
@ -102,8 +106,7 @@ function createConfig(format, output, plugins = []) {
// during a single build. // during a single build.
hasTSChecked = true hasTSChecked = true
const entryFile = const entryFile = /runtime$/.test(format) ? `src/runtime.ts` : `src/index.ts`
format === 'esm-bundler-runtime' ? `src/runtime.ts` : `src/index.ts`
const external = const external =
isGlobalBuild || isRawESMBuild isGlobalBuild || isRawESMBuild
@ -210,7 +213,7 @@ function createMinifiedConfig(format) {
return createConfig( return createConfig(
format, format,
{ {
file: resolve(`dist/${name}.${format}.prod.js`), file: outputConfigs[format].file.replace(/\.js$/, '.prod.js'),
format: outputConfigs[format].format format: outputConfigs[format].format
}, },
[ [

View File

@ -148,9 +148,15 @@ function checkAllSizes(targets) {
function checkSize(target) { function checkSize(target) {
const pkgDir = path.resolve(`packages/${target}`) const pkgDir = path.resolve(`packages/${target}`)
const esmProdBuild = `${pkgDir}/dist/${target}.global.prod.js` checkFileSize(`${pkgDir}/dist/${target}.global.prod.js`)
if (fs.existsSync(esmProdBuild)) { checkFileSize(`${pkgDir}/dist/${target}.runtime.global.prod.js`)
const file = fs.readFileSync(esmProdBuild) }
function checkFileSize(filePath) {
if (!fs.existsSync(filePath)) {
return
}
const file = fs.readFileSync(filePath)
const minSize = (file.length / 1024).toFixed(2) + 'kb' const minSize = (file.length / 1024).toFixed(2) + 'kb'
const gzipped = gzipSync(file) const gzipped = gzipSync(file)
const gzippedSize = (gzipped.length / 1024).toFixed(2) + 'kb' const gzippedSize = (gzipped.length / 1024).toFixed(2) + 'kb'
@ -158,8 +164,7 @@ function checkSize(target) {
const compressedSize = (compressed.length / 1024).toFixed(2) + 'kb' const compressedSize = (compressed.length / 1024).toFixed(2) + 'kb'
console.log( console.log(
`${chalk.gray( `${chalk.gray(
chalk.bold(target) chalk.bold(path.basename(filePath))
)} min:${minSize} / gzip:${gzippedSize} / brotli:${compressedSize}` )} min:${minSize} / gzip:${gzippedSize} / brotli:${compressedSize}`
) )
} }
}