Last active
November 11, 2023 06:42
-
-
Save ppcano/4945826 to your computer and use it in GitHub Desktop.
Precompile handlebars templates with rake-pipeline
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
input "app" do | |
match "templates/**/*.handlebars" do | |
filter HandlebarsPrecompiler | |
filter ConcatFilter, "apptmp.js" | |
filter AddMicroLoader, :global => true | |
filter AddHandlebarsDependencies | |
end | |
..... | |
match "vendor/handlebars.runtime-1.0.rc.2.js" do | |
filter ConcatFilter, "apptmp.js" | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class AddHandlebarsDependencies < Rake::Pipeline::Filter | |
def generate_output(inputs, output) | |
contents = <<END | |
minispade.require('rsvp'); | |
minispade.require('container'); | |
minispade.require('ember-debug'); | |
minispade.require('ember-metal'); | |
minispade.require('ember-runtime'); | |
minispade.require('ember-application'); | |
minispade.require('ember-views'); | |
minispade.require('ember-states'); | |
minispade.require('metamorph'); | |
minispade.require('ember-handlebars'); | |
END | |
output.write contents | |
inputs.each do |input| | |
output.write input.read | |
end | |
end | |
end | |
class HandlebarsPrecompiler < Rake::Pipeline::Filter | |
class << self | |
def context | |
unless @context | |
contents = <<END | |
#{File.read("./app/submodules/ember.js/packages/handlebars/lib/main.js")} | |
#{File.read("./app/vendor/precompile/ember-runtime.js")} | |
#{File.read("./app/submodules/ember.js/packages/ember-handlebars-compiler/lib/main.js")} | |
function precompileEmberHandlebars(string) { | |
return Ember.Handlebars.precompile(string).toString(); | |
} | |
END | |
@context = ExecJS.compile(contents) | |
end | |
@context | |
end | |
end | |
def precompile_templates(name, data) | |
"\nEmber.TEMPLATES['#{name}'] = Ember.Handlebars.template(#{self.class.context.call("precompileEmberHandlebars", data)});\n" | |
end | |
def generate_output(inputs, output) | |
inputs.each do |input| | |
name = File.basename(input.path, '.handlebars') | |
data = File.read(input.fullpath) | |
result = precompile_templates(name, data) | |
output.write result | |
end | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Em.View.extend({ | |
elementId: 'about_screen', | |
templateName: 'about_screen' | |
}); | |
/// use the file -> about_screen.handlebars |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
My project directory is something like:
To precompile handlebars template in the server side, some steps where necessary:
HandlebarsPrecompiler
filter.AddHandlebarsDependencies
filter.Any other recommend way?