【问题标题】:how to minify js produced by sbt-concat如何缩小 sbt-concat 生成的 js
【发布时间】:2014-09-10 04:50:37
【问题描述】:

我正在使用 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 个捆绑文件。

【问题讨论】:

  • 接受适合您需求的答案通常是礼貌的做法。

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


【解决方案1】:

你可以使用 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 源代码。

如果您想在开发中合并/丑化,请使用 pipelineStages in Assets。通常它只会在生产版本中执行。

【讨论】:

    【解决方案2】:

    我知道的一种方法是在 'pipelineStages in Assests' 中进行连接并包含一个过滤器

    例如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)
    

    【讨论】:

    • 你的意思是重新定义pipelineStages
    • 啊,我看到第一个在pipelineStages in Assets。但这并不能完全解释为什么会这样。
    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多