| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- /*
- 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')
- const chalk = require('chalk')
- const execa = require('execa')
- const { targets, fuzzyMatchTarget } = require('./utils')
- const args = require('minimist')(process.argv.slice(2))
- const target = args._[0]
- const formats = args.formats || args.f
- const buildAllMatching = args.all || args.a
- ;(async () => {
- if (!target) {
- await buildAll(targets)
- checkAllSizes(targets)
- } else {
- await buildAll(fuzzyMatchTarget(target, buildAllMatching))
- checkAllSizes(fuzzyMatchTarget(target, buildAllMatching))
- }
- })()
- async function buildAll(targets) {
- for (const target of targets) {
- await build(target)
- }
- }
- async function build(target) {
- const pkgDir = path.resolve(`packages/${target}`)
- const pkg = require(`${pkgDir}/package.json`)
- await fs.remove(`${pkgDir}/dist`)
- await execa(
- 'rollup',
- [
- '-c',
- '--environment',
- `NODE_ENV:production,` +
- `TARGET:${target}` +
- (formats ? `,FORMATS:${formats}` : ``) +
- (args.types ? `,TYPES:true` : ``)
- ],
- { stdio: 'inherit' }
- )
- if (args.types && pkg.types) {
- console.log()
- console.log(
- chalk.bold(chalk.yellow(`Rolling up type definitions for ${target}...`))
- )
- // build types
- const { Extractor, ExtractorConfig } = require('@microsoft/api-extractor')
- const extractorConfigPath = path.resolve(pkgDir, `api-extractor.json`)
- const extractorConfig = ExtractorConfig.loadFileAndPrepare(
- extractorConfigPath
- )
- const result = Extractor.invoke(extractorConfig, {
- localBuild: true,
- showVerboseMessages: true
- })
- if (result.succeeded) {
- console.log(
- chalk.bold(chalk.green(`API Extractor completed successfully.`))
- )
- } else {
- console.error(
- `API Extractor completed with ${extractorResult.errorCount} errors` +
- ` and ${extractorResult.warningCount} warnings`
- )
- process.exitCode = 1
- }
- await fs.remove(`${pkgDir}/dist/packages`)
- }
- }
- function checkAllSizes(targets) {
- console.log()
- for (const target of targets) {
- checkSize(target)
- }
- console.log()
- }
- function checkSize(target) {
- const pkgDir = path.resolve(`packages/${target}`)
- const esmProdBuild = `${pkgDir}/dist/${target}.esm-browser.prod.js`
- if (fs.existsSync(esmProdBuild)) {
- const file = fs.readFileSync(esmProdBuild)
- 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}`
- )
- }
- }
|