Enfield
Jekyll-like static site generator for node.js that aims to be as compatible as possible with Jekyll.
Features
Core functionality is identical to Jekyll:
- Blog aware static site generator
- Compatible with the Jekyll directory and file structure
- Use Markdown for posts
- Code highlighting via Pygments or Highlight.js
- Layouts written using Liquid template engine
- Server / Auto-regenerate
- Extension-less page URLs (i.e.
/example/
from /example.html
via pretty_urls
configuration variable)
There are a few bonus features not present in the default install of Jekyll:
- Jekyll-like plugin model, with CoffeeScript/JS instead of Ruby
- Use Markdown within includes
- Compile and minify CoffeeScript & LESS
- Support post and page URL aliases via redirects
Finally, there are a few missing features:
- Textile support
- Importing tools
Usage
Generated directly from enfield --help
Enfield is a blog-aware static-site generator modeled after Jekyll
Commands:
build Build your site
help Display global or [command] help documentation.
new Creates a new Jekyll site scaffold in PATH
serve Serve your site locally
Global Options:
-s, --source [DIR]
Source directory (defaults to ./)
-d, --destination [DIR]
Destination directory (defaults to ./_site)
--safe
Safe mode (defaults to false)
--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]
Plugins directory (defaults to ./_plugins)
--layouts
Layouts directory (defaults to ./_layouts)
-h, --help
Display help documentation
-v, --version
Display version information
Plugins
Enfield will load any .coffee
or .js
file from the _plugins
directory.
The plugin system is modeled after Jekyll Plugins.
The following plugin types are supported:
- Converters
- Liquid Filters
- Custom Tags
- Generators
Converters
Custom converters can be added. Note that only items with YAML frontmatter will be converted.
All others are ignored.
module.exports = {
"converters": {
"foo": {
"priority": 1,
"matches": function(ext) {
return ext === ".foo";
},
"outputExtension": function(ext) {
return ".html";
},
"convert": function(content, config, callback) {
callback(null, content.replace("foo", ""));
}
}
}
}
Valid priority values: 1 (lowest) - 5 (highest)
Liquid Filters
Custom Liquid Filters can be added:
module.exports = {
"filters": {
"upcase": function(val) {
return val.toUpperCase();
},
"lowercase": function(val) {
return val.toLowerCase();
}
}
}
Custom Tags
module.exports = {
"tags": {
"mytag": function(body, page, site) {
return "Hello World";
}
}
}
Generators
Generators are used to create additional content for your site based on custom logic.
module.exports = {
"generators": {
"bar": function(site, callback) {
callback(null);
}
}
}
See src/plugins/enfield-generators.coffee
for examples.
TODO
- Consider configurable permalinks
- Post index page for year directories
- Check for permalink collisions due to same slug and different dates
License
MIT
Contributors
Contributors
This Project Has a Stupid Name
Richard Enfield is a minor character in The Strange Case of Dr. Jekyll and Mr. Hyde.