anchor.diff:  See the https://github.com/google/closure-compiler/wiki/Warnings[Closure
   Compiler Warning wiki] for detailed descriptions.
   
  -[[closure-defines]]
  -=== :closure-defines
  -
  -Set the values of Closure libraries' variables annotated with
  -https://developers.google.com/closure/compiler/docs/js-for-compiler#tag-define[@define]
  -or with the `cljs.core/goog-define` helper macro. A common usage is
  -setting `goog.DEBUG` to false:
  -
  -[source,clojure]
  -----
  -:closure-defines {"goog.DEBUG" false}
  -----
  -
  -You can also use symbols:
  -
  -[source,clojure]
  -----
  -:closure-defines {my.cool-ns/some-def true}
  -----
  -
  -Note when using Lein the quote is unnecessary due to implicit quoting.
  +[[compiler-stats]]
  +=== :compiler-stats
  +
  +Report basic timing measurements on compiler activity.
  +
  +Defaults to `false`.
  +
  +[source,clojure]
  +----
  +:compiler-stats true
  +----
  +
  +[[deps-cmd]]
  +=== :deps-cmd
  +
  +Set the command to install `node_modules`. Only `"npm"` and `"yarn"` supported.
  +
  +[source,clojure]
  +----
  +:deps-cmd "yarn"
  +----
  +
  +[[elide-asserts]]
  +=== :elide-asserts
  +
  +This flag will cause all `(assert` _x_ `)` calls to be removed during
  +compilation, including implicit ``assert``s associated with `:pre` and
  +`:post` conditions. Useful for production. Default is always false even
  +in advanced compilation. Does NOT specify `goog.asserts.ENABLE_ASSERTS`,
  +which is different and used by the Closure library.
   
   [NOTE]
   ====
  -For `:optimizations :none`, a `:main` option must be specified for
  -defines to work, and only `goog-define` defines are affected.
  -`:closure-defines` currently does not have any effect with
  -`:optimizations :whitespace`.
  -====
  -
  -You can use the variables set in `:closure-defines` to eliminate parts
  -of your code at compile time (DCE). However, to do so you must use `if`
  -or `cond` in combination with an `identical?` comparison. Any other
  -forms (such as `case` or `condp`) will work correctly at runtime, but
  -the javascript output will contain the dead code branches.
  -
  -For example, if you want to make a localized build of your application
  -which only contains the translation messages relevant for the locale:
  -
  -[source,clojure]
  -----
  -(def messages
  -  (cond
  -    (identical? js/goog.LOCALE "nl") i18n.nl/messages
  -    (identical? js/goog.LOCALE "fr") i18n.fr/messages
  -    :else i18n.en/messages))
  -----
  -
  -[[closure-extra-annotations]]
  -=== :closure-extra-annotations
  -
  -Define extra JSDoc annotations that a closure library might use so that
  -they don't trigger compiler warnings.
  -
  -[source,clojure]
  -----
  -:closure-extra-annotations #{"api"}
  -----
  -
  -[[anon-fn-naming-policy]]
  -=== :anon-fn-naming-policy
  -
  -Strategies for how the Google Closure compiler does naming of anonymous
  -functions that occur as r-values in assignments and variable
  -declarations. Defaults to `:off`.
  -
  -[source,clojure]
  -----
  -:anon-fn-naming-policy :unmapped
  -----
  -
  -The following values are supported:
  -
  -* `:off` Don't give anonymous functions names.
  -* `:unmapped` Generates names that are based on the left-hand side of
  -the assignment. Runs after variable and property renaming, so that the
  -generated names will be short and obfuscated.
  -* `:mapped` Generates short unique names and provides a mapping from
  -them back to a more meaningful name that's based on the left-hand side
  -of the assignment.
  +Note that, with JVM ClojureScript, it is not possible to dynamically set
  +`pass:[*assert*]` to false at runtime; this compiler flag must explicitly be
  +used to effect the elision. With self-hosted ClojureScript, on the other
  +hand, setting `pass:[*assert*]` will cause `asserts` to be elided as in
  +Clojure.
  +====
  +
  +[[elide-strict]]
  +=== :elide-strict
  +
  +Whether to elide `use strict` statements in JavaScript output. Defaults to `true`.
  +
  +[source,clojure]
  +----
  +:elide-strict false
  +----
  +
  +[[fingerprint]]
  +=== :fingerprint
  +
  +Defaults to `false`. Whether to enable fingerprinting, which will append a
  +content SHA to output file names. An `manifest.edn` is generated to
  +`:output-dir` for mapping fingerprinted file names. This is especially useful
  +when using `:modules` and `:source-map` options, as the fingerprinted file names
  +will be appropriately referenced.
  +
  +[source,clojure]
  +----
  +:fingerprint true
  +----
  +
  +[[fn-invoke-direct]]
  +=== :fn-invoke-direct
  +
  +Requires `:static-fns true`.
  +This option emits slightly different code that can speed up your code
  +around 10-30%. Higher order function that don't implement the `IFn` protocol
  +are normally called with `f.call(null, arg0, arg1 ...)`. With this option
  +enabled the compiler calls them with a faster `f(arg0, arg1 ...` instead.
  +
  +[CAUTION]
  +====
  +The `:fn-invoke-direct` feature is in alpha status. For some libraries such
  +as Reagent, `:fn-invoke-direct` is known to generate incorrect code.
  +====
  +
  +[source,clojure]
  +----
  +:fn-invoke-direct true
  +----
  +
  +[source,clojure]
  +----
  +:elide-asserts true
  +----
  +
  +[[hashbang]]
  +=== :hashbang
  +
  +When using `:target :nodejs` the compiler will emit a shebang as the
  +first line of the compiled source, making it executable. When your
  +intention is to build a node.js module, instead of executable, use this
  +option to remove the shebang.
  +
  +[source,clojure]
  +----
  +:hashbang false
  +----
  +
  +[[infer-externs]]
  +=== :infer-externs
  +
  +Enables automatically generating externs for interop calls to JavaScript.
  +Defaults to `false`. For more info see
  +<<xref/../../guides/externs#externs-inference,Externs (Alpha)>>
  +
  +[source,clojure]
  +----
  +:infer-externs true
  +----
  +
  +[[language-in-and-language-out]]
  +=== :language-in and :language-out
  +
  +Configure the input and output languages for the closure library. May be:
  +
  +* `:ecmascript-next` identical to `:es-next`
  +* `:ecmascript-2017` identical to `:es-2017`
  +* `:ecmascript-2016` identical to `:es-2016`
  +* `:ecmascript-2015` identical to `:es-2015`, `:ecmascript6`, `:es6`, `:ecmascript6-strict`, `:es6-strict`
  +* `:ecmascript6-typed` identical to `:es6-typed`
  +* `:ecmascript5` identical to `:es5`
  +* `:ecmascript5-strict` identical to `:es5-strict`
  +* `:ecmascript3` identical to `:es3`
  +* `:no-transpile`
  +
  +`:language-in` defaults to `:ecmascript5`
  +`:language-out` defaults to `:no-transpile`
  +
  +[source,clojure]
  +----
  +:language-in  :ecmascript5
  +:language-out :no-transpile
  +----
  +
  +[[libs]]
  +=== :libs
  +
  +Adds dependencies on external js libraries, i.e. Google
  +Closure-compatible javascript files with correct `goog.provides()` and
  +`goog.requires()` calls. Note that files in these directories will be
  +watched and a rebuild will occur if they are modified.
  +
  +Paths or filenames can be given. Relative paths are relative to the
  +current working directory (usually project root).
  +
  +Defaults to the empty vector `[]`
  +
  +[source,clojure]
  +----
  +:libs ["closure/library/third_party/closure"
  +       "src/js"
  +       "src/org/example/example.js"]
  +----
  +
  +[[nodejs-rt]]
  +=== :nodejs-rt
  +
  +Flag to disable Node.js runtime support. Useful when not targeting Node.js but
  +rather targeting JavaScript tools which understand Node.js style `require`
  +conventions
  +
  +[source,clojure]
  +----
  +:nodejs-rt false
  +----
   
   [[optimize-constants]]
   === :optimize-constants
  
positive.code: [[less-common-options]]
  == Less Common Options
  
  [[source-map-path]]
  === :source-map-path
  
  Set the path to source files references in source maps to avoid further
  web server configuration.
  
  [source,clojure]
  ----
  :source-map-path "public/js"
  ----
  
  This option affects the `sources` entry of the emitted source map V3
  JSON file.
  
  [[source-map-asset-path]]
  === :source-map-asset-path
  
  Provides fine grained control over the `sourceMappingURL` comment that
  is appended to generated JavaScript files when source mapping is
  enabled.
  
  [source,clojure]
  ----
  :source-map-asset-path "http://foo.com/public/js/out"
  ----
  
  [[source-map-timestamp]]
  === :source-map-timestamp
  
  Add cache busting timestamps to source map urls. This is helpful for
  keeping source maps up to date when live reloading code.
  
  [source,clojure]
  ----
  :source-map-timestamp true
  ----
  
  [[cache-analysis]]
  
negative.code: :npm-deps {"lodash" "4.17.4"}
  ----
  
  [[optimizations]]
  === :optimizations
  
  