SBT Filter plugin filters out files not to be published
Member of SbtWeb plugin pipeline to filter out assets. The intended use is to remove assets from the output package, e.g.,
*.less, unminified files, etc.
This plugin may be used to remove any intermediate or unnecessary assets from the product build of your project. Only assets directly owned by the project can be filtered.
Add the plugin to the
project/plugins.sbt of your project:
addSbtPlugin("com.github.karelcemus" % "sbt-filter" % "1.1.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)
The plugin must then be added as a new stage in the asset pipeline.
import com.github.karelcemus.filter.Import._ // either pipelineStages := Seq( filter ) // or pipelineStages := Seq( rjs, filter, digest, gzip )
By default, the plugin allows all assets to pass through the pipeline, i.e.,
includeFilter is set to
NothingFilter. The assets must be included in
includeFilter and not in
excludeFilter, otherwise they are dropped. The plugin is implemented as this:
assets.filter( includeFilter ).filterNot( excludeFilter ). This gives you wide range of opportunities to configure, which assets to let through.
For example, to remove the original CoffeeScript and LESS sources from the assets build:
excludeFilter in filter := "*.coffee" || "*.less"
excludeFilter in filter := "*.js" - "main.min.js"
Another approach is to whitelist all assets to be passed through, but the whitelist must be exhaustive. To do this use
includeFilter in filter. You may whitelist more files and then some of them blacklist through
excludeFilter. In consequence, the filter plugin lets pass through all whitelisted assets, which are not blacklisted.
SBT comes with several file filter, but does not provide convenient implicits for filtering files by regular expressions. This plugin also provides a filter converting any regex into
FileFilter. The filter matches the pattern against file's absolute path.
import com.github.karelcemus.filter.Import._ excludeFilter in filter := ".*/images/sprites/.*".r
This implementation is inspired by sbt-filter by @rgcottrell, whose implementation did not work for me.