2013-02-15 12 views
13

Ich werde eine Rich-Client-Webanwendung mit Ruby on Rails 3.2 starten. Ich wollte RequireJS verwenden, aber es scheint mit der Asset-Pipeline zu kollidieren. Soweit ich weiß, was das Letztere im Grunde tut, ist es, abhängige Assets zu verketten, zu minimieren und zu komprimieren (korrigiere mich, wenn ich falsch liege), was nicht sehr kompatibel mit dem asynchronen Laden von JavaScript-Dateien zu sein scheint.Rails 3.2 Asset-Pipeline und RequireJS

Auf den ersten Blick scheint die Asset-Pipeline eine viel bessere Leistung zu haben. Mit RequireJS können Sie jedoch den JavaScript-Code in Modulen organisieren, die einfach wiederverwendet werden können und Abhängigkeiten verwalten.

Gibt es eine Möglichkeit, beide zu kombinieren? Falls nicht, welche würden Sie wählen?

+0

Was soll die Verwendung von RequireJS - In-Browser-Aufnahme von js-Modulen oder Server-Seite sein? –

+0

Es würde im Browser verwendet werden – davids

+0

Es wird die Arbeit gut machen. –

Antwort

4

Ich würde vorschlagen, die RequireJS-Bibliothek herunterladen und werfen Sie es auf vendor/assets/javascripts. Dann in Ihrer application.js Datei:

//= require require 

(? Lustig, ja), und das sollte genug sein.

Dies ist der einfachste Weg, die Asset-Pipeline und eine modulare js-Bibliothek zu kombinieren. Mir sind keine zusätzlichen Einstellungen bekannt, die diese spezielle Bibliothek benötigt, aber Sie können einen Blick auf this Railscast werfen, der etwas Ähnliches beschreibt.

+0

Das ist in Ordnung, es wird funktionieren, aber warum nicht die Pipeline dann deaktivieren? – davids

+0

Ich denke, wenn etwas gut funktioniert, sollte es so wie es ist gehalten werden. Was wäre ohne die Pipeline: unkomprimiertes js hin und her ... –

+1

Aber mein Punkt ist, die Skripte, die asynchron geladen werden, wären nicht komprimiert, oder? Sie wären nicht im Manifest enthalten – davids

7

Sie vielleicht einen Blick auf dieses Juwel https://github.com/jwhitley/requirejs-rails/

scheint zu tun haben wollen, was Sie wollen - was requirejs zum Laden Client-Seite zu verwenden ist, während immer noch die Vorteile einiger der Asset-Pipeline nehmen.

Ich wäre versucht zu empfehlen, dass ich denke, dass die Asset-Pipeline in den meisten Fällen viel schneller wäre, da sie eine einzige minimierte js-Ressource lädt. Das Abhängigkeitsmanagement ist jedoch nicht so gut, es würde also stark von der App abhängen.

+1

Kommt ganz auf den Build-Prozess/App an. Sie können r.js verwenden, um das Minify in eine einzige Datei für die Produktion zu übernehmen, oder AMD nutzen und Pakete erstellen, die On-Demand- oder Lazy-Load-Pakete laden, die später verwendet werden. – kmiyashiro