eleventy boilerplate based on clenemt/eleventy-webpack.
Features
And the main changes are as follows
- Use handlebars for template engine
- Modified image shortcode
- Added icon font generation from svg plugin
- Added linter
- Structure modified
Usage
- Node.js >= 14.17.0
First install the dependencies:
yarn install
Then you can:
| Command | Description |
|---|---|
yarn dev |
Run your website on http://localhost:8080 |
yarn build |
Build your production website inside /_dist |
yarn format |
Run prettier on all filles except /_dist |
yarn analyze |
Output info on your bundle size |
yarn lint:js |
Run eslint |
yarn lint:style |
Run stylelint |
Make sure you use the correct node.js version:
# with bash nvm nvm use `cat .nvmrc` # with windows nvm nvm use $(cat .nvmrc) # or just install the version specified inside `.nvmrc`
Webpack
A very simple webpack.config.js is included. Feel free to change it.
Shortcodes
All shortcodes can be used inside .hbs files.
- Handlebars Built-in Helpers
- if
- unless
- each
- with
- lookup
- log
- handlebars-helpers
And the following custom helpers.
icon
Any SVG added to src/assets/icons is bundled into a symbol sprite file and made available through this shortcode.
<!-- Assuming `src/assets/icons/github.svg` exist --> {{{ icon "github" }}} Github icon <!-- Will be rendered as --> <svg class="icon icon--github" role="img" aria-hidden="true"> <use xlink:href="/assets/img/sprite.svg#github"></use> </svg>
image
Creates a WebP version of the image and the corresponding optimized JPEG / PNG. Images will be created in multiple sizes. See 11ty/shortcodes.js for default values.
<!-- Assuming `src/assets/img/image.jpeg` of width 100px exist --> {{{image src="eleventy_logo.png" alt="" }}} <!-- Will be rendered as --> <picture> <source type="image/webp" srcset="/assets/img/555c1f01-100.webp 100w" media="" sizes=""> <img src="/assets/img/555c1f01-100.png" loading="lazy" width="100" height="182" alt=""> </picture> <!-- Additional options --> <!-- If a title is passed the shortcode will output a <figure> with <figcaption> --> {{{image src="eleventy_logo.png" alt="" caption="Image title" }}} <!-- Will be rendered as --> <figure> <picture> <source type="image/webp" srcset="/assets/img/555c1f01-100.webp 100w" media="" sizes=""> <img src="/assets/img/555c1f01-100.png" loading="lazy" width="100" height="182" alt=""> </picture> <figcaption>Image title</figcaption> </figure> <!-- This is a multiple source type. *If you add @{n}x as suffix to the image file name, it will be converted to resolution --> {{{image src="eleventy_logo.png, eleventy_logo@2x.png" alt="" className="image"}}} <!-- Will be rendered as --> <picture class="image"> <source type="image/webp" srcset="/assets/img/555c1f01-100.webp 100w, /assets/img/30eb47cb-200.webp 2x" media="" sizes=""> <img src="/assets/img/555c1f01-100.png" loading="lazy" width="100" height="182" alt=""> </picture> <!-- In addition, you can specify the media for each image. --> {{{image src="eleventy_logo@2x.png, eleventy_logo.png, eleventy_logo@2x.png" alt="" media="(max-width: 767px),"}}} <!-- Will be rendered as --> <picture> <source type="image/webp" srcset="/assets/img/30eb47cb-200.webp 2x" media="(max-width: 767px)" sizes=""> <source type="image/webp" srcset="/assets/img/555c1f01-100.webp 100w, /assets/img/30eb47cb-200.webp 2x" media="" sizes=""> <img src="/assets/img/30eb47cb-200.png" loading="lazy" width="200" height="363" alt=""> </picture> <!-- It is also possible to automatically resize the image with the widths option --> {{{image src="eleventy_logo.png" alt="" widths="50, 100"}}} <!-- Will be rendered as --> <picture> <source type="image/webp" srcset="/assets/img/555c1f01-50.webp 50w" media="" sizes=""> <source type="image/webp" srcset="/assets/img/555c1f01-100.webp 100w" media="" sizes=""> <img src="/assets/img/555c1f01-100.png" loading="lazy" width="100" height="182" alt=""> </picture> ___ </details> <details> <summary><strong><code>markdown</code></strong></summary> <br> Embed markdown easily. ```html {{#md}} # Heading {{/md}}
format
Format the passed date with date-fns:
<!-- Assuming page.date is a javascript date or dateString --> {{format page.date "yyyy" }}{{this}}{{/format}} <!-- Will be rendered as --> 2021
formatISO
Format the passed date according to ISO format:
<!-- Assuming page.date is a javascript date --> {{formatISO "2021-06-27T18:04:02.024Z" }} <!-- Will be rendered as --> 2021-06-28T03:04:02+09:00
Thanks
- https://github.com/clenemt/eleventy-webpack
- https://github.com/gregives/twelvety
- https://github.com/hankchizljaw/hylia
- https://github.com/MadeByMike/supermaya
- https://github.com/jeromecoupe/webstoemp
- https://github.com/maxboeck/eleventastic
- https://github.com/deviousdodo/elevenpack
- https://github.com/ixartz/Eleventy-Starter-Boilerplate
- https://github.com/google/eleventy-high-performance-blog
- https://github.com/danurbanowicz/eleventy-netlify-boilerplate
- https://github.com/helpers/handlebars-helpers