Как минимизировать JS, производимые sbt-concat

Я проводил эксперименты, используя sbt-concat для объединения пакетов css / js. Затем я попытался расширить свой конвейер для минимизации моих css и js. Довольно просто использовать sbt-css-compress, который минимизирует весь CSS, создаваемый sbt-concat. Я пробовал sbt-closure для js, но, похоже, не работает. Просто чтобы прояснить, я попробовал sbt-closure, и он подтвердил, что он выполняет компиляцию всех js ниже в / assets. Однако я пытаюсь выяснить, работает ли он с sbt-concat.

Например: если у меня есть /assets/js/f1.js и /assets/js/f2.js, и я хотел бы объединить их и минимизировать в 1 файл комплекта.

2 ответа

Вы можете использовать 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 если вы хотите согласиться / развить в разработке. Обычно он выполняется только для производственной сборки.

Один из известных мне способов состоит в том, чтобы выполнить concat в 'pipeStages 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)
Другие вопросы по тегам