From ad7d98adbfa4109521c6e7253dfd5db232885c6b Mon Sep 17 00:00:00 2001 From: Alex Shaw Date: Sat, 29 Jun 2019 11:02:47 -0400 Subject: [PATCH] Added feat to write to different output file. --- README.md | 4 ++++ index.js | 25 +++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4ed8df8..6144e4b 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,10 @@ terser(options); Generates source maps and passes them to rollup. Defaults to `true`. +`options.filename: string` + +If set, writes the minified output to this file, and leaves the regular output file unminified. Not set by default. + `options.numWorkers: number` Amount of workers to spawn. Defaults to the number of CPUs minus 1. diff --git a/index.js b/index.js index fd741ab..2172a8d 100644 --- a/index.js +++ b/index.js @@ -1,11 +1,21 @@ const { codeFrameColumns } = require("@babel/code-frame"); const Worker = require("jest-worker").default; const serialize = require("serialize-javascript"); +const fs = require('fs'); +const { promisify } = require('util'); + +const writeFile = promisify(fs.writeFile); function terser(userOptions = {}) { if (userOptions.sourceMap != null) { throw Error("sourceMap option is removed, use sourcemap instead"); } + + let fileName = ''; + if (userOptions.filename) { + fileName = userOptions.filename; + delete userOptions.filename; + } return { name: "terser", @@ -26,7 +36,7 @@ function terser(userOptions = {}) { module: outputOptions.format === "es" || outputOptions.format === "esm" }); - for (let key of ["sourcemap", "numWorkers"]) { + for (let key of [ "sourcemap", "numWorkers"] ) { if (normalizedOptions.hasOwnProperty(key)) { delete normalizedOptions[key]; } @@ -52,10 +62,21 @@ function terser(userOptions = {}) { this.worker = 0; } }; + + const writer = async ret => { + if (fileName && outputOptions.file) { + await writeFile(fileName, ret.code); + if (ret.map && outputOptions.sourcemap) { + await writeFile(fileName.concat(".map"), ret.map); + } + return null; + } + return ret; + } result.then(handler, handler); - return result; + return result.then(writer); } }; }