Optimieren von JS aus WebJars mithilfe von sbt-rjs in einer Play 2.3.x-App


74

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

Hier ist ein Ausschnitt aus meiner build.sbt- Datei, in der ich meine Webjar-Abhängigkeiten spezifiziere:

// 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 Build-Konfiguration

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 zum Schluss hier mein core.js- Modul:

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

Nachdem activator clean stageich über die Befehlszeile ausgeführt hatte, hoffte ich, dass die erstellte Datei core.js alle meine angegebenen Abhängigkeiten in einer einzigen Datei verketten und minimieren würde, aber keine davon. Wenn ich eine Nicht-WebJar-Datei als Abhängigkeit für core.js spezifiziere , wird dies korrekt optimiert.

Ist das, was ich versuche, möglich? Ich habe ziemlich viel gegoogelt und konnte so oder so keine klare Antwort finden.

Vielen Dank!


1
Ich bin mir nicht sicher, ob das momentan möglich ist sbt-rjs. Vielleicht möchten Sie ein Problem einreichen: github.com/sbt/sbt-rjs/issues
James Ward

Antworten:


1

Ich benutze Play 2.4.3.

Zu addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7")plugins.sbt hinzugefügt

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

Dies in meiner build.sbt erledigt die gesamte Schrumpfungsarbeit usw., um JS und Webjars zu beugen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.