I\'m building an Ember.js application using Express.js as the backend. Right now, I load all my *.js files individually and store my Handlebars templates in my HTML file. I like
It's possible to build a very convenient system using nothing but connect-assets, grunt-ember-templates and a Gruntfile. First, we need to add the following configuration to Gruntfile.coffee:
grunt.initConfig
watch:
ember_templates:
files: 'assets/templates/**/*.hbr'
tasks: 'ember_templates'
ember_templates:
compile:
options:
templateName: (sourceFile) ->
sourceFile.replace(/assets\/templates\//, '').replace(/\.hbr$/, '')
files:
'assets/js/templates.js': 'assets/templates/**/*.hbr'
# Plugins.
grunt.loadNpmTasks('grunt-contrib-watch')
grunt.loadNpmTasks('grunt-ember-templates')
# Default task.
grunt.registerTask('default', ['ember_templates'])
Then, in our Express.js server configuration:
app.use require("connect-assets")()
In our index.html file, we need to add two lines in the appropriate places. These need be to processed through the Node.js template engine of our choice:
<%- css("application") %>
<%- js("application") %>
We then need to create assets/css/application.styl (which can use @import directives) and assets/js/application.coffee (which can use "#= require foo" comments).
To use this system, first run:
grunt
To keep the template.js file permanently up to date, run:
grunt watch
For everything else, see the connect-assets documentation. Note that I had more luck with Stylus than with Less, which appears to have issues with connect-assets at the time of writing.
Since I wrote this answer, I've come across several other good options that handle asset compilation in various ways: