Das Problem wurde in Play 2.3.1 behoben, die exakt Ihren Anforderungen entspricht.
Das Verhalten in Produktion minimierten Versionen von Vermögenswerten mit sollte standardmäßig in der Version des Spiels mit @routes.Assets.versioned
(nicht routes.Assets.at
) aktiviert werden.
Es erfordert, dass die entsprechende Route Erklärung in conf/routes
ist:
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
Was ich ein wenig unklar gefunden zunächst die Reihenfolge, in ihm von Elementen in pipelineStages
sowie die Forderung enthält sbt-rjs war .
Und nachdem ich den Satz über die Reihenfolge geschrieben hatte ich in dem Abschnitt „RequireJS“ in Play 2.3 Migration Guide gefunden:
Die Reihenfolge der Stufen ist signifikant. Sie wollen zuerst die Dateien optimieren, Digests von ihnen erstellen und dann Gzip-Versionen aller resultierenden Assets produzieren.
ich auch in Play 2.3 Migration Guide im Abschnitt "Closure Compiler" gefunden habe:
UglifyJS 2 derzeit über das RequireJS Plugin zur Verfügung gestellt wird (beschrieben next). Die Absicht ist in Zukunft, ein eigenständiges UglifyJS 2 Plugin auch für Situationen zur Verfügung zu stellen, in denen RequireJS nicht verwendet wird.
Alles begann mit der Antwort auf Play 2.3 sbt-web plugin Javascript minification.
Also, die unter pipelineStages
ist die Arbeit ein - beachten Sie die Reihenfolge und rjs
:
pipelineStages := Seq(rjs, uglify, digest, gzip)
project/plugins.sbt
verwendet wurde, war wie folgt:
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")
Vergessen Sie nicht, eine leere app/assets/javascripts/main.js
-Datei zu erstellen lassen Sie sbt-rjs
seine Arbeit machen.
Als Test habe ich eine Play-Anwendung mit activator new playApp play-scala
und angewandt, um die oben genannten Änderungen in der Build sowie in app/views/main.scala.html
, die letztlich folgt aussah, als (Anmerkung @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
Ausführen und Aufruf curl http://localhost:9000
gibt (meine aus Gründen der Lesbarkeit der Formatierung):
➜ 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>
Hinweis 4302136334616ae0605d47a1932ee262-hello.min.js
und die nicht-JavaScript-Ressourcen verdaut .
Ich versuche auch, uglify zu verwenden. Ich weiß jedoch nicht, wie ich mit Play anfangen soll. Wenn Sie ein Beispiel haben, können Sie bitte teilen? – JMC
Ich habe uglify, digest, gzip zu Project + pipelineStages hinzugefügt wie beschrieben. Ich habe auch die '@ routes.Assets.at' -> '@ routes.Assets.versioned' in Ansichten geändert. Das Starten meiner App mit 'activator start' erzeugt die minimierten Javascripts, aber der Browser lädt immer noch die ursprünglichen, nicht-minifizierten Versionen. – nyuwec
Hallo @Jacek ich folge allen oben genannten Schritten. Aber wenn "Aktivator Start" Befehl ausgeführt wird, bekomme ich folgenden Fehler. '[info] Fertig Verpackung. java.util.regex.PatternSyntaxException: Unmatched Closing ')' in der Nähe von Index 47 ['"]? ([^ \ S'"] *) ['"]? \ S *: \ s * [\ []? . * ['"]. */lib \ (. *) ['"] ' –