Проблема Reverse Router должен автоматически использовать минифицированные активы в рабочей среде, исправлена в Play 2.3.1, которая точно соответствует вашим требованиям.
Согласно журналу изменений Play 2.3.1:
Поведение обратного маршрутизатора Assets изменилось: если существуют уменьшенные версии ресурсов, теперь он вместо этого возвращает URL-адрес для них. Чтобы отключить это поведение, установите assets.checkForMinified=true
в application.conf
.
ПРИМЕЧАНИЕ Вместо этого следует читать set assets.checkForMinified=false
, но в любом случае...
Дальнейшее работает только в рабочем режиме, поэтому запустите приложение с activator start
, а не run
, или используйте сгенерированные сценарии запуска (после stage
).
Поведение использования уменьшенных версий ресурсов в рабочей среде должно быть включено по умолчанию в версии Play с @routes.Assets.versioned
(не routes.Assets.at
).
Это требует, чтобы соответствующее объявление маршрута в conf/routes
было:
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
Поначалу мне показался немного непонятным порядок элементов в pipelineStages
, а также требование включать sbt. -rjs в нем.
И сразу после того, как я написал предложение о заказе, я нашел его в разделе «RequireJS» в Play 2.3 Migration Guide< /а>:
Порядок этапов имеет значение. Сначала вы хотите оптимизировать файлы, создать их дайджесты, а затем создать gzip-версии всех полученных ресурсов.
Я также нашел в Руководстве по переходу на Play 2.3 в разделе "Closure Compiler":
UglifyJS 2 в настоящее время предоставляется через подключаемый модуль RequireJS (описан ниже). В будущем планируется предоставить отдельный плагин UglifyJS 2 также для ситуаций, когда RequireJS не используется.
Все началось с ответа на минификацию Javascript плагина sbt-web для Play 2.3.
Итак, приведенный ниже pipelineStages
является рабочим - следите за порядком и rjs
:
pipelineStages := Seq(rjs, uglify, digest, gzip)
project/plugins.sbt
использовалось следующим образом:
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.5")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-uglify" % "1.0.3")
addSbtPlugin("com.typesafe.sbt" % "sbt-gzip" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.6")
Не забудьте создать пустой файл app/assets/javascripts/main.js
, чтобы позволить sbt-rjs
выполнять свою работу.
В качестве теста я создал приложение Play с activator new playApp play-scala
и применил вышеуказанные изменения в сборке, а также в app/views/main.scala.html
, что в конечном итоге выглядело следующим образом (примечание @routes.Assets.versioned
):
@(title: String)(content: Html)
<!DOCTYPE html>
<html>
<head>
<title>@title</title>
<link rel="stylesheet" media="screen" href="@routes.Assets.versioned("stylesheets/main.css")">
<link rel="shortcut icon" type="image/png" href="@routes.Assets.versioned("images/favicon.png")">
<script src="@routes.Assets.versioned("javascripts/hello.js")" type="text/javascript"></script>
</head>
<body>
@content
</body>
</html>
Выполнение activator start
и вызов curl http://localhost:9000
дает (форматирование мое для удобочитаемости):
➜ play-uglify curl http://localhost:9000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Play</title>
<link rel="stylesheet" media="screen" href="/assets/stylesheets/d41d8cd98f00b204e9800998ecf8427e-main.css">
<link rel="shortcut icon" type="image/png" href="/assets/images/84a01dc6c53f0d2a58a2f7ff9e17a294-favicon.png">
<script src="/assets/javascripts/4302136334616ae0605d47a1932ee262-hello.min.js" type="text/javascript"></script>
</head>
<body>
<h1>Your new application is ready.</h1>
</body>
</html>
Обратите внимание на 4302136334616ae0605d47a1932ee262-hello.min.js
и дайджест ресурсов, отличных от JavaScript.
person
Jacek Laskowski
schedule
08.07.2014