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