This project is to extract the Meteor Blaze Templating Engine to npm so it can be used in other projects.
This package can be used in three ways
- Compile the templates yourself for later bundling
npm install meteor-blaze-compiler
node ./node_modules/.bin/blaze myTemplate.html > myTemplate.template.js
-
Use webpack - see the example webpack project for how to configure your modules. Note that I've not worked with webpack much, so there may be a better way to do this however it works nicely for me.
-
Compile the templates yourself, but serve the rendered HTML from a server - see the example express project. In principle, you compile the templates by hand, require them as needed, then use
Blaze.toHTML
orBlaze.toHTMLWithData
This project is combined of 2 npm packages (and a common npm packages) a webpack npm package and an as-yet unpublished meteor package (just to demo that it).
-
meteor-blaze-compiler
is the compiler for blaze. Include it in any project where you want to build templates (possibly as a dev dependency) -
meteor-blaze-runtime
is the runtime environment for blaze. Include it in any project where you will render blaze templates. In the browser this will also setup the events, on the server it will not. -
blaze-loader
is the webpack loader for blaze templates defined in.html
files. Currently only the<template>
tag is recognized (e.g.,<head>
and<body>
tags are ignored).
It is currently working, with a few caveats worth nothing:
- All the tests included in the blaze packages are passing
- It has been tested using webpack for client side rendering, express for server side rendering, and in Meteor where it seems to exhibit the same behaviour as the default blaze.
- There are example projects to get you started with usage.
- Outof date packages: This project makes use of several existing npm extractions of meteor packages, namely
meteor-standalone-*
- many of these packages are years (some of them 6!) out of date. I'm reluctant to publish duplicate packages (particularly given there is already a full set of duplicates atmeteor-*
which operate differently). The packages used arediff-sequence, mongo-id, ordered-dict, reactive-var and tracker
. So, some features of current blaze may not work. - Mismatch between Meteor and npm versions of some globals:
Tracker
andReactiveVar
are the two biggies - Excessive use of global vars: I've tried to reduce this where possible, but in the runtime
_, Template, Blaze, HTML, Spacebars, Tracker, ReactiveVar
all need to be global :( - Dependency on
jquery
andunderscore
in the compiler and runtime packages andjsdom
(or something else that provides window/document) if you want to render templates server side.
I'd like to detect if Meteor is present and use the Meteor versions of some of these dependencies if it is. Of course, perhaps if you're using Meteor you should just use the Meteor Blaze package.