2015-02-09 4 views
74

Ist es möglich, eine Play 2.3 App concat/optimieren JS (mit sbt-rjs), die in meiner App über WebJars enthalten ist?
Um ein konkretes Beispiel zu geben: Ich versuche ein core.js Modul zu erstellen, das alle meine Bibliotheken von Drittanbietern verkettet und verkleinert in einer einzigen Datei enthält, die dann als Abhängigkeit für andere AMD-Module angegeben werden kann.
Es wäre großartig, diese Bibliotheken über WebJars einzubinden, anstatt die Quelle "manuell" herunterzuladen.Optimierung von JS von WebJars mit sbt-rjs in einer Play 2.3.x App

Hier ein Ausschnitt aus meiner build.sbt Datei ist, wo ich meine webjar Abhängigkeiten bin Angabe:

// 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") 
) 

Hier ist meine requireJS Config

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' 
    } 
    ] 
}); 

Und schließlich ist hier mein Kern bauen .js Modul:

define(['angular', 'angularRoute', 'underscore', 'bootstrap'], function() { 
    // core dependencies are loaded... 
}); 

Nach der Ausführung activator clean stage von der Befehlszeile habe ich gehofft, dass die gebaute core.js Datei würde alle meine angegebenen Abhängigkeiten verkettet und minimiert in einer einzigen Datei enthalten, aber es enthält keine von ihnen. Wenn ich eine Nicht-WebJar-Datei als eine Abhängigkeit für core.js anmelde, wird das korrekt optimiert.

Was versuche ich zu tun? Ich habe ziemlich viel gegoogelt und konnte keine klare Antwort finden.

Danke!

+1

Ich bin mir nicht sicher, ob das mit 'sbt-rjs' jetzt möglich ist. Möglicherweise möchten Sie ein Problem einreichen: https://github.com/sbt/sbt-rjs/issues –

Antwort

1

Ich benutze Play 2.4.3.

Added addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7") plugins.sbt

// rjs = RequireJS, uglifies, shrinks to one file, replaces WebJars with CDN 
client accepts them 
pipelineStages := Seq(rjs, digest, gzip) 

Das in meinem build.sbt nicht alle die schrumpfende Arbeit usw. JS Bower und webjars.

Verwandte Themen