Static site generator for Node.js, Grunt.js, and Yeoman (and soon, Gulp), using the Handlebars template engine. Used by Zurb Foundation, Zurb Ink, H5BP/Effeckt, Less.js / lesscss.org, Topcoat, Web Experience Toolkit, and hundreds of other projects to build sites, themes, components, documentation, blogs and gh-pages.
assemble
Static site generator for Grunt.js, Yeoman and Node.js. Used by Zurb Foundation, Zurb Ink, H5BP/Effeckt, Less.js / lesscss.org, Topcoat, Web Experience Toolkit, and hundreds of other projects to build sites, themes, components, documentation, blogs and gh-pages.
Visit the website →
Why use Assemble?
- Most popular site generator for Grunt.js and Yeoman. Assemble is used to build hundreds of web projects, ranging in size from a single page to 14,000 pages (that we're aware of!). Let us know if you use Assemble.
- Allows you to carve your HTML up into reusable fragments: partials, includes, sections, snippets... Whatever you prefer to call them, Assemble does that.
- Optionally use
layouts
to wrap your pages with commonly used elements and content. - "Pages" can either be defined as HTML/templates, JSON or YAML, or directly inside the Gruntfile.
- It's awesome. Lol just kidding. But seriously, Assemble... is... awesome! and it's fun to use.
...and of course, we use Assemble to build the project's own documentation http://assemble.io:
For more: hear Jon Schlinkert and Brian Woodward discuss Assemble on Episode 98 of the Javascript Jabber Podcast.
The "assemble" task
Getting Started
Assemble requires Grunt
~0.4.1
If you haven't used grunt before, be sure to check out the Getting Started guide.
From the same directory as your project's Gruntfile and package.json, install Assemble with the following command:
npm install assemble --save-dev
Once that's done, add this line to your project's Gruntfile:
grunt.loadNpmTasks('assemble');
The "assemble" task
Run the "assemble" task with the
grunt assemble
command.Task targets, files and options may be specified according to the grunt Configuring tasks guide.
In your project's Gruntfile, add a section named
assemble
to the data object passed into grunt.initConfig()
.assemble:{
options:{
assets:'assets',
plugins:['permalinks'],
partials:['includes/**/*.hbs'],
layout:['layouts/default.hbs'],
data:['data/*.{json,yml}']
},
site:{
src:['docs/*.hbs'],
dest:'./'
}
},
Options
See the documentation for Options for more information.
assets
Type:
String
Default: undefined
Used with the
{{assets}}
variable to resolve the relative path from the dest file to the assets folder.data
Type:
String|Array|Object
Default: src/data
Specify the data to supply to your templates. Data may be formatted in
JSON
, YAML
, YAML front matter, or passed directly as an object. Wildcard patterns may also be used.layoutdir
Type:
String
Default: undefined
The directory to use as the "cwd" for layouts. When this option is defined, layouts may be defined using only the name of the layout.
layout
Type:
String
Default: undefined
If set, this defines the layout file to use for the task or target. However, when specifying a layout, unlike Jekyll, Assemble requires a file extension since you are not limited to using a single file type.
layoutext
Type:
String
Default: undefined
Specify the extension to use for layouts, enabling layouts in YAML front matter to be defined without an extension:
---
layout:default
---
partials
Type:
String|Array
Default: undefined
Specifies the Handlebars partials files, or paths to the directories of files to be used.
plugins
Type:
String|Array
Default: undefined
Name of the npm module to use and/or the path(s) to any custom plugins to use. Wildcard patterns may also be used.
See the docs for plugins.
helpers
Type:
String|Array
Default: handlebars-helpersName of the npm module to use and/or the path(s) to any custom helpers to use with the current template engine. Wildcard patterns may also be used.
By default, Assemble includes handlebars-helpers as a dependency, so any helpers from that library are already available to be used in your templates.
See the docs for helpers.
ext
Type:
String
Default: .html
Specify the file extension for destination files. Example:
marked
Type:
Object
Default: Marked.js defaultsSpecify the Marked.js options for the
{{#markdown}}{{/markdown}}
and {{md ""}}
helpers to use when converting content.engine
Type:
String
Default: Handlebars
Specify the engine to use for compiling templates if you are not using Handlebars.
Also see assemble-swig for compiling Swig Templates.
flatten
Type:
Boolean
Default: false
Remove anything after (and including) the first
.
in the destination path, then append this value. In other words, when files are generated from different source folders this "flattens" them into the same destination directory. See building the files object dynamically for more information on files
formats.Visit Assemble's documentation for more information about options.
Usage Examples
Simple example of using data files in both
.json
and .yml
format to build Handlebars templates.assemble:{
options:{
data:'src/data/**/*.{json,yml}'
},
docs:{
files:{
'dist/':['src/templates/**/*.hbs']
}
}
}
Using multiple targets
assemble:{
options:{
assets:'assets',
layoutdir:'docs/layouts'
partials:['docs/includes/**/*.hbs'],
data:['docs/data/**/*.{json,yml}']
},
site:{
options:{
layout:'default.hbs'
},
src:['templates/site/*.hbs'],
dest:'./'
},
blog:{
options:{
layout:'blog-layout.hbs'
},
src:['templates/blog/*.hbs'],
dest:'articles/'
},
docs:{
options:{
layout:'docs-layout.hbs'
},
src:['templates/docs/*.hbs'],
dest:'docs/'
}
},
Visit Assemble's documentation for many more examples and pointers on getting started.
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality, and please re-build the documentation with grunt-verb before submitting a pull request.
Assemble plugins
Here are some related projects you might be interested in from the Assemble core team.
- assemble-middleware-anchors: Assemble middleware for creating anchor tags from generated html.
- assemble-middleware-contextual: Assemble middleware for generating a JSON file containing the context of each page. Basic middleware to help see what's happening in the build.
- assemble-middleware-decompress: Assemble plugin for extracting zip, tar and tar.gz archives.
- assemble-middleware-download: Assemble middleware for downloading files from GitHub.
- assemble-middleware-drafts: Assemble middleware (v0.5.0) for preventing drafts from being rendered.
- assemble-middleware-i18n: Assemble middleware for adding i18n support to projects.
- assemble-middleware-lunr: Assemble middleware for creating a search engine within your static site using lunr.js.
- assemble-middleware-permalinks: Permalinks middleware for Assemble, the static site generator for Grunt.js and Yeoman. This plugin enables powerful and configurable URI replacement patterns, presets, uses Moment.js for parsing dates, and much more.
- assemble-middleware-rss: Assemble middleware for creating RSS feeds with Assemble. (NOT published yet!)
- assemble-middleware-sitemap: Assemble middleware for generating sitemaps.
- assemble-middleware-toc: Assemble middleware for creating a table of contents in the generated HTML, using Cheerio.js
- assemble-middleware-wordcount: Assemble middleware for displaying a word-count, and estimated reading time on blog posts or pages.
Visit assemble.io/assemble-middleware for more information about Assemble middleware.
Authors
Jon Schlinkert
Brian Woodward
This file was generated by grunt-verb on June 13, 2014.
from https://gitlab.com/Acidburn0zzz/assemble
(http://assemble.io/)