# [Google Closure Compiler](https://developers.google.com/closure/compiler/) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/google/closure-compiler/badge)](https://api.securityscorecards.dev/projects/github.com/google/closure-compiler) [![Build Status](https://github.com/google/closure-compiler/workflows/Compiler%20CI/badge.svg)](https://github.com/google/closure-compiler/actions) [![Open Source Helpers](https://www.codetriage.com/google/closure-compiler/badges/users.svg)](https://www.codetriage.com/google/closure-compiler) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](https://github.com/google/closure-compiler/blob/master/code_of_conduct.md) The [Closure Compiler](https://developers.google.com/closure/compiler/) is a tool for making JavaScript download and run faster. It is a true compiler for JavaScript. Instead of compiling from a source language to machine code, it compiles from JavaScript to better JavaScript. It parses your JavaScript, analyzes it, removes dead code and rewrites and minimizes what's left. It also checks syntax, variable references, and types, and warns about common JavaScript pitfalls. ## Getting Started The easiest way to install the compiler is with [NPM](https://npmjs.com) or [Yarn](https://yarnpkg.com): ```bash yarn global add google-closure-compiler # OR npm i -g google-closure-compiler ``` The package manager will link the binary for you, and you can access the compiler with: ```bash google-closure-compiler ``` This starts the compiler in interactive mode. Type: ```javascript var x = 17 + 25; ``` Hit `Enter`, then `Ctrl+Z` (on Windows) or `Ctrl+D` (on Mac/Linux), then `Enter` again. The Compiler will respond with the compiled output (using `SIMPLE` mode by default): ```javascript var x=42; ``` #### Downloading from Maven Repository A pre-compiled release of the compiler is also available via [Maven](https://mvnrepository.com/artifact/com.google.javascript/closure-compiler). ### Basic usage The Closure Compiler has many options for reading input from a file, writing output to a file, checking your code, and running optimizations. Here is a simple example of compressing a JS program: ```bash google-closure-compiler --js file.js --js_output_file file.out.js ``` We get the **most benefit** from the compiler if we give it **all of our source code** (see [Compiling Multiple Scripts](#compiling-multiple-scripts)), which allows us to use `ADVANCED` optimizations: ```bash google-closure-compiler -O ADVANCED rollup.js --js_output_file rollup.min.js ``` NOTE: The output below is just an example and not kept up-to-date. The [Flags and Options wiki page](https://github.com/google/closure-compiler/wiki/Flags-and-Options) is updated during each release. To see all of the compiler's options, type: ```bash google-closure-compiler --help ```
--flag |
Description |
---|---|
--compilation_level (-O) |
Specifies the compilation level to use.
Options: BUNDLE , WHITESPACE_ONLY ,
SIMPLE (default), ADVANCED
|
--env |
Determines the set of builtin externs to load.
Options: BROWSER , CUSTOM .
Defaults to BROWSER .
|
--externs |
The file containing JavaScript externs. You may specify multiple |
--js |
The JavaScript filename. You may specify multiple. The flag name is
optional, because args are interpreted as files by default. You may also
use minimatch-style glob patterns. For example, use
--js='**.js' --js='!**_test.js' to recursively include all
js files that do not end in _test.js
|
--js_output_file |
Primary output filename. If not specified, output is written to stdout. |
--language_in |
Sets the language spec to which input sources should conform.
Options: ECMASCRIPT3 , ECMASCRIPT5 ,
ECMASCRIPT5_STRICT , ECMASCRIPT_2015 ,
ECMASCRIPT_2016 , ECMASCRIPT_2017 ,
ECMASCRIPT_2018 , ECMASCRIPT_2019 ,
STABLE , ECMASCRIPT_NEXT
|
--language_out |
Sets the language spec to which output should conform.
Options: ECMASCRIPT3 , ECMASCRIPT5 ,
ECMASCRIPT5_STRICT , ECMASCRIPT_2015 ,
ECMASCRIPT_2016 , ECMASCRIPT_2017 ,
ECMASCRIPT_2018 , ECMASCRIPT_2019 ,
STABLE
|
--warning_level (-W) |
Specifies the warning level to use.
Options: QUIET , DEFAULT , VERBOSE
|
Code Path |
src/com/google/javascript/rhino , test/com/google/javascript/rhino
|
URL | https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino |
Version | 1.5R3, with heavy modifications |
License | Netscape Public License and MPL / GPL dual license |
Description | A partial copy of Mozilla Rhino. Mozilla Rhino is an implementation of JavaScript for the JVM. The JavaScript parse tree data structures were extracted and modified significantly for use by Google's JavaScript compiler. |
Local Modifications | The packages have been renamespaced. All code not relevant to the parse tree has been removed. A JsDoc parser and static typing system have been added. |
URL | http://args4j.kohsuke.org/ |
Version | 2.33 |
License | MIT |
Description | args4j is a small Java class library that makes it easy to parse command line options/arguments in your CUI application. |
Local Modifications | None |
URL | https://github.com/google/guava |
Version | 31.0.1 |
License | Apache License 2.0 |
Description | Google's core Java libraries. |
Local Modifications | None |
URL | https://github.com/findbugsproject/findbugs |
Version | 3.0.1 |
License | BSD License |
Description | Annotations for software defect detection. |
Local Modifications | None |
URL | http://junit.org/junit4/ |
Version | 4.13 |
License | Common Public License 1.0 |
Description | A framework for writing and running automated tests in Java. |
Local Modifications | None |
URL | https://github.com/google/protobuf |
Version | 3.0.2 |
License | New BSD License |
Description | Supporting libraries for protocol buffers, an encoding of structured data. |
Local Modifications | None |
URL | https://github.com/google/re2j |
Version | 1.3 |
License | New BSD License |
Description | Linear time regular expression matching in Java. |
Local Modifications | None |
URL | https://github.com/google/truth |
Version | 1.1 |
License | Apache License 2.0 |
Description | Assertion/Proposition framework for Java unit tests |
Local Modifications | None |
URL | https://ant.apache.org/bindownload.cgi |
Version | 1.10.11 |
License | Apache License 2.0 |
Description | Ant is a Java based build tool. In theory it is kind of like "make" without make's wrinkles and with the full portability of pure java code. |
Local Modifications | None |
URL | https://github.com/google/gson |
Version | 2.9.1 |
License | Apache license 2.0 |
Description | A Java library to convert JSON to Java objects and vice-versa |
Local Modifications | None |
Code Path | contrib/nodejs |
URL | https://github.com/dcodeIO/node.js-closure-compiler-externs |
Version | e891b4fbcf5f466cc4307b0fa842a7d8163a073a |
License | Apache 2.0 license |
Description | Type contracts for NodeJS APIs |
Local Modifications | Substantial changes to make them compatible with NpmCommandLineRunner. |