8 Stimmen

Einrichten der Rake-Pipeline für die Verwendung mit Handlebars zusammen mit Google App Engine

Ich versuche also Folgendes zu tun. Ich baue eine ember.js-Anwendung, mit einem Java-Backend auf GAE läuft.

Ich verwende Lenker, aber ich möchte, dass sie in separate Dateien aufgeteilt werden und nicht einfach alle in die index.html eingefügt werden.

Über das ember.js-IRC wurde ich auf die Rechen-Pipeline zusammen mit minispade

Zusammen mit dem Web-Filter und eine benutzerdefinierte Lenkerfilter Ich habe mit der Erstellung des Assetfiles begonnen. Ich weiß nicht, Ruby, oder gem-Dateien, etc.

Also ich versuche, herauszufinden, der beste Weg, um in der Lage sein, meine coffeescript/Handlebars-Dateien im laufenden Betrieb zu kompilieren, minispade Sie, aber halten Sie die einzelnen Dateien zugänglich, während im Dev-Modus, so dass ich Sie debuggen kann. Was das schwierig macht, ist, dass die Rake-Pipeline auf einem anderen Port läuft als GAE. Ich bin mir also nicht sicher, wie ich das handhaben soll. Soll ich meine Indexdatei in GAE während der Entwicklung auf einzelne Dateien am Port 9292 (rakep) verweisen lassen, aber im Produktionsmodus auf die vollständig verkettete Version? Ich bin mir nicht sicher.

Das habe ich hier also versucht zu tun: https://gist.github.com/1495740 indem sie nur einen Abschnitt haben, der durch das 'build'-Flag ausgelöst wurde. Ich bin nicht einmal sicher, ob das so funktioniert.

Ich weiß, dass es hier eine Menge Verwirrung gibt. Entschuldigung, wie ich sagte, ich bin nicht einmal im Entferntesten vertraut mit dem Ruby-Stil der Dinge zu tun.

16voto

Yehuda Katz Punkte 28175

Da Sie kein Ruby-Kenner sind, finden Sie hier die zuverlässigsten Schritte, um eine OSX-Umgebung mit der Rake-Pipeline einzurichten:

Schritt 1: Bundler installieren

# on OSX, using built-in Ruby
$ sudo gem install bundler --pre

Schritt 2: Erstellen einer Gemfile

# inside your app directory
$ bundle init

# will create a file named Gemfile in the root

Schritt 3: Hinzufügen von rake-pipeline zum Gemfile

# inside the Gemfile
gem "rake-pipeline-web-filters"

Schritt 4: Installieren Sie Ihre Edelsteine

$ bundle install --binstubs

Schritt 5: Assetdatei einrichten

Aber Sie haben es bereits getan...

Schritt 6: Rake::Pipeline ausführen

# to run the preview server
$ bin/rakep

# to build your assets
$ bin/rakep build

9voto

dudleyf Punkte 353

Rake::Pipeline.build ist die Methode, die die Auswertung einer Assetfile . Sie können sich vorstellen, dass Ihre gesamte Assetfile ist eingewickelt in eine Rake::Pipeline.build {} Block; Sie sollten niemals einen innerhalb eines Assetfile .

Einige der Filter in den Dokumenten sind hypothetisch, die meisten dieser Dokumente wurden geschrieben, bevor es überhaupt Filter gab. Allerdings wurde kürzlich ein CoffeeScript-Compiler hinzugefügt.

Was Ihre Hauptfrage betrifft, so bin ich mir nicht sicher, ob es einen sauberen Weg gibt, dies mit dem aktuellen rakep Umsetzung. Eine Assetfile ist nur Ruby, obwohl, so ist es möglich, etwas zusammen zu hacken, die funktionieren sollte. Hier ist, wie ich Ihre schreiben würde:

require "json"
require "rake-pipeline-web-filters"
require "rake-pipeline-web-filters/helpers"

class HandlebarsFilter < Rake::Pipeline::Filter
  def initialize(&block)
    block ||= proc { |input| input.sub(/\.handlebars$/, '.js') }
    super(&block)
  end

  def generate_output(inputs, output)
    inputs.each do |input|
      output.write "return Ember.Handlebars.compile(#{input.read.to_json})"
    end
  end
end

# process all js, css and html files in app/assets
input "assets"

# processed files should be outputted to public
output "public"

# process all coffee files
match "**/*.coffee" do
  # compile all CoffeeScript files. the output file
  # for the compilation should be the input name
  # with the .coffee extension replaced with .js
  coffee_script

  # The coffee_script helper is exactly equivalent to:
  # filter Rake::Pipeline::Web::Filters::CoffeeScriptCompiler
end

match "**/*.js" do
  minispade
  if ENV['RAKEP_ENV'] == "production"
    concat "application.js"
  else
    concat
  end
end

match "**/*.handlebars" do
  filter HandlebarsFilter
  minispade
  concat "templates.js"
end

Les if ENV['RAKEP_ENV'] bit liest eine Umgebungsvariable, um zu entscheiden, ob Ihr JS zu einer einzigen Datei verkettet werden soll.

Jetzt können Sie also Folgendes ausführen RAKEP_ENV="production" rakep build für ein verkettetes Build, oder einfach rakep build für ein Entwicklungs-Build.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X