Create a gist now

Instantly share code, notes, and snippets.

Ember Handlebars Precompile
require 'execjs'
class HandlebarsFilter < Filter
class << self
def contents
@@contents ||= ["headless-ember.js"),"ember.js")].join("\n")
def context
@@context ||= ExecJS.compile(contents)
def generate_output(inputs, output)
inputs.each do |input|
name = File.basename(input.path, '.handlebars')
compiled ="precompileEmberHandlebars",
output.write "\nEmber.TEMPLATES['#{name}'] = Ember.Handlebars.template(#{compiled});\n"
input "templates"
output "output"
match "*.handlebars" do
filter HandlebarsFilter
concat "templates.js"
// DOM
var Element = {};
Element.firstChild = function () { return Element; };
Element.innerHTML = function () { return Element; };
var document = { createRange: false, createElement: function() { return Element; } };
var window = this;
this.document = document;
// Console
var console = window.console = {};
console.log = = console.warn = console.error = function(){};
// jQuery
var jQuery = function() { return jQuery; };
jQuery.ready = function() { return jQuery; };
jQuery.inArray = function() { return jQuery; };
jQuery.jquery = "1.7.1";
var $ = jQuery;
// Ember
function precompileEmberHandlebars(string) {
return Ember.Handlebars.precompile(string).toString();

By the way, this requires Ember master as of 1/13.


Oh, and a special thanks to @tchak for helping me figure this out!


I'm guessing that we should be able to replace Assetfile.rb with some equivalent js and run this through nodejs?


@garth, in theory yes. The main thing is that you have to have a full Ember running to get proper compilation. Unforunately, right now that requires stubbing some things out like in my headless-ember.js.


@wagenet I am getting error when compiling ember 1.0.0-pre.4 in this line Any workaround?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment