如何缩小sbt-concat生成的js

时间:2014-09-10 04:50:38

标签: playframework-2.3 sbt-web sbt-concat

我正在使用sbt-concat进行实验来组合css / js包。然后我尝试扩展我的管道,以便缩小我的css和js。使用sbt-css-compress相当容易,它可以缩小sbt-concat生成的所有CSS。 我为js尝试了sbt-closure,但它似乎不起作用。为了清楚起见,我尝试了sbt-closure,并确认它将以下所有js编译为/ assets。但是我想弄清楚它是否适用于sbt-concat。

例如: 如果我有/assets/js/f1.js和/assets/js/f2.js并且我想将它们组合并缩小为1个捆绑文件。

2 个答案:

答案 0 :(得分:5)

您可以使用sbt-uglify进行组合和缩小。

添加到plugins.sbt

addSbtPlugin("com.typesafe.sbt" % "sbt-uglify" % "1.0.3")

添加到build.sbt

pipelineStages := Seq(uglify)

UglifyKeys.uglifyOps := { js =>
  Seq((js.sortBy(_._2), "main.min.js"))
}

这将按照文件路径的字母顺序组合您的javascript源。

如果要在开发中进行连接/ uglify,请使用pipelineStages in Assets。通常它只会执行生产构建。

答案 1 :(得分:2)

我知道的一种方法是在“Assests中的pipelineStages”中进行concat并包含一个过滤器

例如在build.sbt

Concat.groups := Seq(
  "all.js" -> group(Seq(
    "js/f1.js",
    "js/f2.js"
  ))
)

Concat.parentDir := "concated"

Closure.suffix := ".min.js"

Closure.flags := Seq("--formatting=PRETTY_PRINT", "--accept_const_keyword")

pipelineStages in Assets := Seq(concat)

includeFilter in closure := "all.js"

pipelineStages := Seq(closure, digest, gzip)