tmzint / sbt-vulcanize

sbt-web Vulcanize plugin

Version Matrix

sbt-vulcanize

Allows the usage of vulcanize from within sbt.

Needs vulcanize and mkdirp installed in node path:

{
   ...
  "dependencies": {
    "vulcanize": "^1.14.0",
    "mkdirp": "^0.5.0"
  },
   ...
}

Use the addSbtPlugin in your project's plugins.sbt:

addSbtPlugin("com.tmzint.sbt" % "sbt-vulcanize" % "0.4.0")

Your project's build file also needs to enable sbt-web plugins. For example with build.sbt:

lazy val root = (project in file(".")).enablePlugins(SbtWeb)

Enabling the Vulcanize pipline stage:

pipelineStages := Seq(vulcanize/*, gzip*/)

The plugin allows the use of all options of the vulcanize cli https://github.com/polymer/vulcanize - at point of writing.

Option Description
inlineScripts Inline external scripts.
inlineCss Inline external stylesheets.
exclude Exclude subpaths from root.
stripExclude Exclude a subpath and strip the link that includes it.
stripComments Strips all HTML comments not containing an @license from the document.
noImplicitStrip DANGEROUS! Avoid stripping imports of the transitive dependencies of imports specified with --exclude. May result in duplicate javascript inlining.
abspath Make all adjusted urls absolute.
addImport Add these imports to the target HTML before vulcanizing.
redirect Takes an argument in the form of URI | PATH where url is a URI composed of a protocol, hostname, and path and PATH is a local filesystem path to replace the matched URI part with. Multiple redirects may be specified; the earliest ones have the highest priority.

By default main.html is the entry point fed to Vulcanize. Beyond just main.html, you can use an expression in your build.sbt like the following, which uses all html files not starting with an _ as entry points:

includeFilter in vulcanize := GlobFilter("*.html")

excludeFilter in vulcanize := GlobFilter("_*.html")