Il problema Reverse Router should use minified assets in production automatically è stato corretto in Play 2.3.1 che corrisponde esattamente alle vostre esigenze.
Secondo Play 2.3.1 Changelog:
Il comportamento dei Beni router inverso è cambiato, se minified versioni di beni esistere, ora ritorna un URL per chi invece. Per disabilitare questo comportamento, impostare assets.checkForMinified=true
in application.conf
.
NOTA Dovrebbe piuttosto leggere impostato assets.checkForMinified=false
, ma comunque ...
Quello che segue opere in modalità di produzione solo in modo da iniziare l'applicazione con activator start
non run
o utilizzare le avviare script generati (dopo stage
).
Il comportamento di utilizzare versioni minified di attività in produzione deve essere attivata di default nella versione di gioco con @routes.Assets.versioned
(non routes.Assets.at
).
Si richiede che la dichiarazione via appropriata in conf/routes
è:
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
Quello che ho trovato un po 'poco chiaro in un primo momento era l'ordine di elementi in pipelineStages
, nonché l'obbligo di includere sbt-rjs in esso .
E solo dopo che avevo scritto la frase circa l'ordine che ho trovato nella sezione "RequireJS" in Play 2.3 Migration Guide:
L'ordine degli stadi è significativo. Innanzitutto, si desidera ottimizzare i file , produrre loro digesti e quindi produrre versioni gzip di tutte le risorse risultanti .
ho trovato anche in Play 2.3 Migration Guide nella sezione "Closure Compiler":
UglifyJS 2 è attualmente fornito tramite il plugin RequireJS (descritto successivo). L'intento futuro è quello di fornire un plug-in UglifyJS 2 autonomo anche in situazioni in cui RequireJS non viene utilizzato.
Tutto è iniziato con la risposta a Play 2.3 sbt-web plugin Javascript minification.
Così, il sotto pipelineStages
è quello lavorativo - mente l'ordine e rjs
:
pipelineStages := Seq(rjs, uglify, digest, gzip)
project/plugins.sbt
utilizzata è stata la seguente:
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")
Non dimenticare di creare un file vuoto app/assets/javascripts/main.js
lasciare fare allo sbt-rjs
il suo lavoro.
Come prova, ho creato un'applicazione Gioca con activator new playApp play-scala
e applicate le modifiche di cui sopra nella costruzione così come in app/views/main.scala.html
che alla fine sembrava come segue (nota @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>
Esecuzione activator start
e chiamando curl http://localhost:9000
dà (miniera di formattazione del per il bene di leggibilità):
➜ 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>
Nota 4302136334616ae0605d47a1932ee262-hello.min.js
e le risorse non JavaScript digerite .
Sto anche cercando di usare uglify. Tuttavia, non so come iniziare con Play. Se hai un esempio, puoi condividere per favore? – JMC
Ho aggiunto uglify, digest, gzip per project + pipelineStages come hai descritto. Ho anche modificato le viste "@ routes.Assets.at" -> "@ routes.Assets.versioned". L'avvio della mia app utilizzando 'activator start' produce i javascript miniati, ma il browser carica ancora le versioni originali non minimate. – nyuwec
Salve @Jacek seguo tutti i passi su di lei che hai menzionato. Ma quando eseguo il comando 'activator start' sto ricevendo un errore successivo. '[info] Fine confezione. java.util.regex.PatternSyntaxException: chiusura incompleta ')' vicino all'indice 47 ['"]? ([^ \ S'"] *) ['"]? \ S *: \ s * [\ []? . * ['"]. */lib \ (. *) ['"] ' –