playframework - Optimizando JS desde WebJars usando sbt-rjs en una aplicación Play 2.3.x
requirejs sbt-web (1)
¿Es posible tener una aplicación Play 2.3 concat / optimizar JS (usando sbt-rjs) que está incluida en mi aplicación a través de WebJars?
Para dar un ejemplo concreto: estoy tratando de crear un módulo
core.js
que contenga todas mis bibliotecas de terceros concatenados y minimizados en un solo archivo que luego se puede especificar como una dependencia para otros módulos AMD.
Sería genial incluir estas bibliotecas a través de WebJars en lugar de descargar la fuente "manualmente".
Aquí hay un fragmento de mi archivo build.sbt donde estoy especificando mis dependencias webjar:
// Webjars
libraryDependencies ++= Seq(
"org.webjars" % "requirejs" % "2.1.15",
"org.webjars" % "underscorejs" % "1.7.0",
"org.webjars" % "jquery" % "1.11.1",
"org.webjars" % "bootstrap" % "3.3.1" exclude("org.webjars", "jquery"),
"org.webjars" % "angularjs" % "1.3.4-1" exclude("org.webjars", "jquery")
)
Aquí está mi configuración de construcción requireJS
requirejs.config({
baseUrl: ''/assets/javascripts'',
shim: {
''jsRoutes'': {
deps: [],
exports: ''jsRoutes''
},
''angular'': {
deps: [''jquery''],
exports: ''angular''
},
''underscore'': {
exports: ''_''
},
''angularRoute'': [''angular''],
''angularCookies'': [''angular''],
''bootstrap'': [''jquery'']
},
paths: {
''requirejs'': ''../lib/requirejs/require'',
''jquery'': ''../lib/jquery/jquery'',
''underscore'': ''../lib/underscorejs/underscore'',
''angular'': ''../lib/angularjs/angular'',
''angularRoute'': ''../lib/angularjs/angular-route'',
''angularCookies'': ''../lib/angularjs/angular-cookies'',
''bootstrap'': ''../lib/bootstrap/js/bootstrap'',
''jsRoutes'': ''/jsroutes'',
''core'': ''./core''
},
modules: [
{
name: ''core''
}
]
});
Y finalmente, aquí está mi módulo core.js :
define([''angular'', ''angularRoute'', ''underscore'', ''bootstrap''], function() {
// core dependencies are loaded...
});
Después de ejecutar la
activator clean stage
desde la línea de comandos, esperaba que el archivo
core.js
integrado incluyera todas mis dependencias especificadas concatenadas y minimizadas en un solo archivo, pero no incluye ninguna de ellas.
Si especifico un archivo que no es WebJar como una dependencia para
core.js
, lo optimiza correctamente.
¿Es posible lo que intento hacer? He estado buscando bastante en Google y no he podido encontrar una respuesta clara de ninguna manera.
¡Gracias!
Estoy usando Play 2.4.3.
Se agregó
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7")
a plugins.sbt
// rjs = RequireJS, uglifies, shrinks to one file, replaces WebJars with CDN
client accepts them
pipelineStages := Seq(rjs, digest, gzip)
Esto en mi build.sbt hace todo el trabajo de reducción, etc. para bower JS y webjars.