Prepack CLI


npm install -g prepack

Compiling a File

Compile a file and print it to the console:

prepack script.js

Compile a file and output to another file:

prepack script.js --out script-processed.js

If you want to output a source map file add the --srcmapOut. If your bundle was generated from some other compiler, Prepack will automatically look for a .map file but you can also specify it using the --srcmapIn option:

prepack script.js --out script-processed.js --srcmapIn --srcmapOut

For advanced uses see the API options or prepack --help.

prepack [ --out output.js ] [ --compatibility jsc ] [ --mathRandomSeed seedvalue ] [ --srcmapIn inputMap ] [ --srcmapOut outputMap ] [ --speculate ] [ --trace ] [ -- | input.js ] [ --singlePass ] [ --debugNames ] [ --logStatistics ]


You can also run Prepack in REPL mode. This probably isn't very useful but it lets you test bugs in Prepack's interpreter.


Prepack API

You can also use the programmatic API as a Node.js module.


npm install --save-dev prepack
var Prepack = require("prepack");
import { prepack, prepackFileSync } from 'prepack';
import * as Prepack from 'prepack';


Prepack.prepack(codeString, options) // returns { code: string, map: SourceMap }

Babel AST

Prepack.prepackFromAst(babelAstNode, code, options) // returns { code: string, map: SourceMap }

Note: Currently, the source code still has to be provided for Function.prototype.toString and error messages.

File Async

Prepack.prepackFile(filename, options, callback) // callback(error, { code: string, map: SourceMap })

File Sync

Prepack.prepackFileSync(filename, options) // returns { code: string, map: SourceMap }


Option Type Default Description
filename string inferred Filename to use in error stacks.
inputSourceMapFilename string null If provided, this input source map file is used as the input before generating a new source map.
sourceMaps boolean false Determines whether a source map file should be generated.
compatibility "browser" | "jsc-600-1-4-17" "browser" Select a built-in environment compatibility. More built-in environments will be added in the future.
mathRandomSeed string null If a seed string is provided, Math.random() can be relied on and used in concrete code paths.
speculate boolean false Speculatively pre-execute more `require(...)` calls if they're part of the residual program.
trace boolean false Logs evaluated function calls.
debugNames boolean false If true, try to retain original variable and function names as part of the generated code.
singlePass boolean false Currently, the serializer makes two passes to optimize the variable naming in the output but this is slow so this lets you opt for a single pass. This option is expected to be unnecessary in the future.
logStatistics boolean false If true, logs statistics about the number of objects, functions and ids generated.
logModules boolean false If true, logs modules evaluated.
delayUnsupportedRequires boolean false If true, speculatively executed requires that failed to execute doesn't get preexecuted.
internalDebug boolean false If true, prints the JS stack inside of Prepack along with the stack in the Prepacked program. Useful for debugging Prepack itself.
uniqueSuffix string null If adds a unique suffix to generated IDs so that they don't risk colliding with anything else in the program. Expected to be automatic in the future.
timeout number Infinity Number of milliseconds to run a program before it times out. Useful to avoid infinite loops in the Prepacked program.
strictlyMonotonicDateNow boolean false Currently only used to run the Test262 test suite which requires reading in increasing order.