====== Getting started ====== ===== Installing Jade ===== To use Jade, you must first have Node.js installed on your system. On Windows and MacOS, you can use an [[http://nodejs.org/download/|installer]]; on Linux, you should be able to [[https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager|use your package manager]]((See http://lovingthepenguin.blogspot.com/2013/10/node-no-such-file-or-directory.html for a potential gotcha on Debian-based systems.)). Once you have Node.js installed, you have the choice of installing the Jade module so it's available system-wide or only for a particular project. To make it available system-wide, open a terminal and enter: npm install jade -g When I am learning new Node.js modules, I prefer to install them on a per-project basis. To do this, open a terminal in your project directory (or navigate to the directory) and enter: npm install jade When this is done you should see a ''node_modules'' subdirectory inside your project directory. Inside ''node_modules'' will be the Jade modules as well as any other modules Jade depends on. ===== Creating an HTML fragment ===== ==== Rendering Jade strings to HTML ==== The first thing we are going to do is use Jade to produce an HTML fragment from a string literal. This is done with the ''jade.render'' method. var jade = require('jade'); // Render an HTML fragment from a string literal written in Jade. var htmlFrag = jade.render('p Hello, world'); console.log(htmlFrag); output:

Hello, world

==== Compiling Jade strings into functions ==== You can use the ''jade.compile'' method to create a function that when called will return the converted Jade. var jade = require('jade'); // Compile a function that produces an HTML fragment from a string // literal written in Jade. var frag = jade.compile('p Hello, world'); // Render stuff. var htmlFrag = frag(); console.log(htmlFrag); output:

Hello, world

==== Rendering a file full of Jade ==== In a lot of cases, you will want to render code that is stored in a file rather than in a string literal or variable. You can do that with the ''jade.renderFile'' method. h1 Hello, there! p Nice to meet you. var jade = require('jade'); // Render an HTML fragment from a file written in Jade. var htmlFrag = jade.renderFile('myFrag.jade'); console.log(htmlFrag); output:

Hello, there!

Nice to meet you.

=== Adding options === The above produces valid HTML, but it's hard to read. To make the output human-readable, we can pass ''jade.renderFile'' an options object with its ''pretty'' property set to true. (The options argument can be provided to the ''jade.render'' and ''jade.compile'' methods as well.) var jade = require('jade'); options = { pretty: true }; // Render an HTML fragment from a file written in Jade. var htmlFrag = jade.renderFile('myFrag.jade', options); console.log(htmlFrag); output:

Hello, there!

Nice to meet you.

=== Using the callback function === You can (and should) also take anvantage of the callback that you can pass to ''jade.renderFile'' to handle errors: var jade = require('jade'); options = { pretty: true }; // Render an HTML fragment from a file written in Jade. // Use callback to trap errors. var htmlFrag = jade.renderFile('myFrag.jade', options, function (err, html) { if (err) { throw(err); } return html; }); console.log(htmlFrag); ==== Writing output to a file ==== To write the output created to a file, you'll need to use Node.js' ''fs'' module. var jade = require('jade'); var fs = require('fs'); options = { pretty: true }; // Render an HTML fragment from a file written in Jade. var htmlFrag = jade.renderFile('myFrag.jade', options, function(err, html) { if (err) { throw(err); } return html; }); // Write HTML fragment to a file. fs.writeFile('myFrag.html', htmlFrag, function(err) { if (err) { throw(err); } }); output: $ cat myFrag.html

Hello, there!

Nice to meet you.

===== Creating web pages ===== In this section, we will use Jade to build a simple but complete web page. It will serve as an introduction to fundamental Jade language concepts. doctype html html head title A Simple Site body h1 Hello there! p Nice to meet you. var jade = require('jade'); var fs = require('fs'); options = { pretty: true }; // Render an HTML page from a file written in Jade. var html = jade.renderFile('myPage.jade', options, function(err, html) { if (err) { throw(err); } return html; }); // Write HTML to a file. fs.writeFile('myPage.html', html, function(err) { if (err) { throw(err); } }); output: $ cat myPage.html A Simple Site

Hello there!

Nice to meet you.

The basic idea is that Jade uses a shorthand HTML syntax where indentation is used to nest elements. This should be enough to make you comfortable reading the [[http://jade-lang.com/reference/|Jade Language Reference]], after which you should be able to compose entire web pages.