From 898b1106c93876aff9a7019237b52d869a1122e0 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 19 Sep 2018 12:21:00 -0400 Subject: [PATCH] workflow: improve build & dev scripts --- scripts/build.js | 51 +++++++++++++++++++++++++++++++++++------------- scripts/dev.js | 32 +++++++++++++++++------------- 2 files changed, 55 insertions(+), 28 deletions(-) diff --git a/scripts/build.js b/scripts/build.js index 98c97399..035212b0 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,3 +1,19 @@ +/* +Produce prodcution builds and stitch toegether d.ts files. + +To specific the package to build, simply pass its name and the desired build +formats to output (defaults to `buildOptions.formats` specified in that package, +or "esm,cjs"): + +``` +# name supports fuzzy match. will build all packages with name containing "dom": +yarn build dom + +# specify the format to output +yarn build core --formats cjs +``` +*/ + const fs = require('fs-extra') const path = require('path') const zlib = require('zlib') @@ -6,8 +22,9 @@ const execa = require('execa') const dts = require('dts-bundle') const { targets, fuzzyMatchTarget } = require('./utils') -const target = process.argv[2] - +const args = require('minimist')(process.argv.slice(2)) +const target = args._[0] +const formats = args.formats || args.f ;(async () => { if (!target) { await buildAll(targets) @@ -18,22 +35,28 @@ const target = process.argv[2] } })() -async function buildAll (targets) { +async function buildAll(targets) { for (const target of targets) { await build(target) } } -async function build (target) { +async function build(target) { const pkgDir = path.resolve(`packages/${target}`) await fs.remove(`${pkgDir}/dist`) - await execa('rollup', [ - '-c', - '--environment', - `NODE_ENV:production,TARGET:${target}` - ], { stdio: 'inherit' }) + await execa( + 'rollup', + [ + '-c', + '--environment', + `NODE_ENV:production,` + + `TARGET:${target}` + + (formats ? `FORMATS:${formats}` : ``) + ], + { stdio: 'inherit' } + ) const dtsOptions = { name: target === 'vue' ? target : `@vue/${target}`, @@ -47,7 +70,7 @@ async function build (target) { await fs.remove(`${pkgDir}/dist/packages`) } -function checkAllSizes (targets) { +function checkAllSizes(targets) { console.log() for (const target of targets) { checkSize(target) @@ -55,7 +78,7 @@ function checkAllSizes (targets) { console.log() } -function checkSize (target) { +function checkSize(target) { const pkgDir = path.resolve(`packages/${target}`) const esmProdBuild = `${pkgDir}/dist/${target}.esm-browser.prod.js` if (fs.existsSync(esmProdBuild)) { @@ -63,8 +86,8 @@ function checkSize (target) { const minSize = (file.length / 1024).toFixed(2) + 'kb' const gzipped = zlib.gzipSync(file) const gzipSize = (gzipped.length / 1024).toFixed(2) + 'kb' - console.log(`${ - chalk.gray(chalk.bold(target)) - } min:${minSize} / gzip:${gzipSize}`) + console.log( + `${chalk.gray(chalk.bold(target))} min:${minSize} / gzip:${gzipSize}` + ) } } diff --git a/scripts/dev.js b/scripts/dev.js index 7f71703b..6a4fa307 100644 --- a/scripts/dev.js +++ b/scripts/dev.js @@ -1,24 +1,28 @@ -// Run Rollup in watch mode for a single package for development. -// Only the ES modules format will be generated, as it is expected to be tested -// in a modern browser using