Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
@11ty/eleventy
Advanced tools
A simpler static site generator. An alternative to Jekyll. Written in JavaScript. Transforms a directory of templates (of varying types) into HTML.
Works with:
.html
).md
) (using markdown-it
).liquid
) (used by Jekyll).njk
).hbs
).mustache
).ejs
).haml
).pug
).jstl
) (`strings with backticks`)Requires Node version 8 or above. node --version
will tell you what version you’re running.
Available on npm.
npm install -g @11ty/eleventy
(You can also install locally using npm install --save-dev @11ty/eleventy
).
eleventy
. The original project took a JSON file and converted it HTML with some one-off JavaScript. This uses eleventy to transform the data using a nunjucks template, resulting in a cleaner, templated setup.eleventy
that has hundreds of different font combinations in an attempt to pick a logo.# Searches the current directory, outputs to ./_site
eleventy
# Equivalent to
eleventy --input=. --output=_site
# Automatically run when template files change.
eleventy --watch
# Use only a subset of template types
eleventy --formats=md,html,ejs
# Find out the most up-to-date list of commands (there are more)
eleventy --help
eleventy --input=. --output=_site
A template.md
in the current directory will be rendered to _site/template/index.html
. Read more about Permalinks
Yes, you can use the same input
and output
directories, like so:
# Watch a directory for any changes to markdown files, then
# automatically parse and output as HTML files, respecting
# directory structure.
eleventy --input=. --output=. --watch --formats=md
When the input and output directories are the same and the source template is named index.html
, it will output as index-o.html
to avoid overwriting itself. This is a special case that only applies to index.html
filenames. You can customize the -o
suffix with the htmlOutputSuffix
configuration option.
# Adds `-o` to index.html file names to avoid overwriting matching files.
eleventy --input=. --output=. --formats=html
You may use front matter on any template file to add local data. Front matter looks like this:
---
title: My page title
---
<!doctype html>
<html>
…
This allows you to assign data values right in the template itself. Here are a few front matter keys that we use for special things:
permalink
: Add in front matter to change the output target of the current template. You can use template syntax for variables here. Read more about Permalinks.layout
: Wrap current template with a layout template found in the _includes
folder.pagination
: Enable to iterate over data. Output multiple HTML files from a single template. Read more about Pagination.tags
: A single string or array that identifies that a piece of content is part of a collection. Collections can be reused in any other template. Read more about Collections.date
: Override the default date (file creation) to customize how the file is sorted in a collection. Read more about Collections.pkg
: The local project’s package.json
values.pagination
: (When enabled in front matter) Read more about Pagination.collection
: links to the other sorted templates in the current folder. Read more about CollectionsOptionally add data files to add global static data available to all templates. Uses the dir.data
configuration option. Read more about Template Data Files.
Add an .eleventyignore
file to the root of your input directory for a new line-separated list of files that will not be processed. Paths listed in your project’s .gitignore
file are automatically ignored.
Add an .eleventy.js
file to root directory of your project to override these configuration options with your own preferences. Example:
module.exports = {
dir: {
input: "views"
}
};
Configuration Option Key | Default Option | Valid Options | Command Line Override | Description |
---|---|---|---|---|
dir.input | . | Any valid directory. | --input | Controls the top level directory inside which the templates should be found. |
dir.includes | _includes | Any valid directory inside of dir.input . | N/A | Controls the directory inside which the template includes/extends/partials/etc can be found. |
dir.data | _data | Any valid directory inside of dir.input . | N/A | Controls the directory inside which the global data template files, available to all templates, can be found. |
dir.output | _site | Any valid directory. | --output | Controls the directory inside which the transformed finished templates can be found. |
dataTemplateEngine | liquid | A valid template engine or false | N/A | Run the data.dir global data files through this template engine before transforming it to JSON. |
markdownTemplateEngine | liquid | A valid template engine or false | N/A | Run markdown through this template engine before transforming it to HTML. |
htmlTemplateEngine | liquid | A valid template engine or false | N/A | Run HTML templates through this template engine before transforming it to (better) HTML. |
templateFormats | liquid,ejs, md,hbs, mustache,haml, pug,njk,html | Any combination of these | --formats | Specify which type of templates should be transformed. |
htmlOutputSuffix | -o | String | N/A | If the input and output directory match, index.html files will have this suffix added to their output filename to prevent overwriting the template. |
filters | {} | Object | N/A | Filters can transform output on a template. Take the format function(str, outputPath) { return str; } . For example, use a filter to format an HTML file with proper whitespace. |
onContentMapped | function(map) {} | Function | N/A | Callback executes when the full data map for all content is generated. |
handlebarsHelpers | {} | Object | N/A | The helper functions passed to Handlebars.registerHelper . Helper names are keys, functions are the values. |
nunjucksFilters | {} | Object | N/A | The helper functions passed to nunjucksEnv.addFilter . Helper names are keys, functions are the values. |
Here are the features tested with each template engine that use external files and thus are subject to setup and scaffolding.
Engine | Feature | Syntax |
---|---|---|
ejs | ✅ Include (Preprocessor Directive) | <% include /user/show %> looks for _includes/show/user.ejs |
ejs | ✅ Include (pass in Data) | <%- include('/user/show', {user: 'Ava'}) %> looks for _includes/user/show.ejs |
Liquid | ✅ Include | {% include 'show/user' %} looks for _includes/show/user.liquid |
Liquid | ✅ Include (pass in Data) | {% include 'user' with 'Ava' %} |
Liquid | ✅ Include (pass in Data) | {% include 'user', user1: 'Ava', user2: 'Bill' %} |
Mustache | ✅ Partials | {{> user}} looks for _includes/user.mustache |
Handlebars | ✅ Partials | {{> user}} looks for _includes/user.hbs |
Handlebars | ✅ Helpers | See handlebarsHelpers configuration option. |
HAML | ❌ but 🔜 Filters | |
Pug | ✅ Includes | include /includedvar.pug looks in _includes/includedvar.pug |
Pug | ✅ Excludes | extends /layout.pug looks in _includes/layout.pug |
Nunjucks | ✅ Includes | {% include 'included.njk' %} looks in _includes/included.njk |
Nunjucks | ✅ Extends | {% extends 'base.njk' %} looks in _includes/base.njk |
Nunjucks | ✅ Imports | {% import 'macros.njk' %} looks in _includes/macros.njk |
Nunjucks | ✅ Filters | See nunjucksFilters configuration option. |
npm run test
npm run watch:test
FAQs
A simpler static site generator.
The npm package @11ty/eleventy receives a total of 41,659 weekly downloads. As such, @11ty/eleventy popularity was classified as popular.
We found that @11ty/eleventy demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.