bundle.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. "use strict"
  2. const fs = require("fs")
  3. const path = require("path")
  4. const browserify = require("browserify")
  5. const {minify} = require("terser")
  6. const [sourceFile, outFile, globalName] = process.argv.slice(2)
  7. const json = require(path.join(__dirname, "..", "package.json"))
  8. const bundleDir = path.join(__dirname, "..", "bundle")
  9. if (!fs.existsSync(bundleDir)) fs.mkdirSync(bundleDir)
  10. browserify({standalone: globalName})
  11. .require(path.join(__dirname, "../dist", sourceFile), {expose: sourceFile})
  12. .bundle(saveAndMinify)
  13. async function saveAndMinify(err, buf) {
  14. if (err) {
  15. console.error("browserify error:", err)
  16. process.exit(1)
  17. }
  18. const bundlePath = path.join(bundleDir, outFile)
  19. const opts = {
  20. ecma: 2018,
  21. warnings: true,
  22. compress: {
  23. pure_getters: true,
  24. keep_infinity: true,
  25. unsafe_methods: true,
  26. },
  27. format: {
  28. preamble: `/* ${json.name} ${json.version} (${globalName}): ${json.description} */`,
  29. },
  30. sourceMap: {
  31. filename: outFile + ".min.js",
  32. url: outFile + ".min.js.map",
  33. },
  34. }
  35. const result = await minify(buf.toString(), opts)
  36. fs.writeFileSync(bundlePath + ".bundle.js", buf)
  37. fs.writeFileSync(bundlePath + ".min.js", result.code)
  38. fs.writeFileSync(bundlePath + ".min.js.map", result.map)
  39. if (result.warnings) result.warnings.forEach((msg) => console.warn("terser.minify warning:", msg))
  40. }