build.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const fs = require('fs-extra')
  2. const path = require('path')
  3. const zlib = require('zlib')
  4. const chalk = require('chalk')
  5. const execa = require('execa')
  6. const dts = require('dts-bundle')
  7. const { targets, fuzzyMatchTarget } = require('./utils')
  8. const target = process.argv[2]
  9. ;(async () => {
  10. if (!target) {
  11. await buildAll(targets)
  12. checkAllSizes(targets)
  13. } else {
  14. await buildAll(fuzzyMatchTarget(target))
  15. checkAllSizes(fuzzyMatchTarget(target))
  16. }
  17. })()
  18. async function buildAll (targets) {
  19. for (const target of targets) {
  20. await build(target)
  21. }
  22. }
  23. async function build (target) {
  24. const pkgDir = path.resolve(`packages/${target}`)
  25. await fs.remove(`${pkgDir}/dist`)
  26. await execa('rollup', [
  27. '-c',
  28. '--environment',
  29. `NODE_ENV:production,TARGET:${target}`
  30. ], { stdio: 'inherit' })
  31. const dtsOptions = {
  32. name: target === 'vue' ? target : `@vue/${target}`,
  33. main: `${pkgDir}/dist/packages/${target}/src/index.d.ts`,
  34. out: `${pkgDir}/dist/index.d.ts`
  35. }
  36. dts.bundle(dtsOptions)
  37. console.log()
  38. console.log(chalk.blue(chalk.bold(`generated typings at ${dtsOptions.out}`)))
  39. await fs.remove(`${pkgDir}/dist/packages`)
  40. }
  41. function checkAllSizes (targets) {
  42. console.log()
  43. for (const target of targets) {
  44. checkSize(target)
  45. }
  46. console.log()
  47. }
  48. function checkSize (target) {
  49. const pkgDir = path.resolve(`packages/${target}`)
  50. const esmProdBuild = `${pkgDir}/dist/${target}.esm-browser.prod.js`
  51. if (fs.existsSync(esmProdBuild)) {
  52. const file = fs.readFileSync(esmProdBuild)
  53. const minSize = (file.length / 1024).toFixed(2) + 'kb'
  54. const gzipped = zlib.gzipSync(file)
  55. const gzipSize = (gzipped.length / 1024).toFixed(2) + 'kb'
  56. console.log(`${
  57. chalk.gray(chalk.bold(target))
  58. } min:${minSize} / gzip:${gzipSize}`)
  59. }
  60. }