Как минимизировать 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)