-
Notifications
You must be signed in to change notification settings - Fork 1
/
.eleventy.js
82 lines (72 loc) · 2.52 KB
/
.eleventy.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
const fs = require('fs');
const Nunjucks = require('nunjucks');
const syntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight');
const {
imageShortcode,
classNamesFunction,
formatDate,
splitLines,
} = require('./extensions.js');
const Image = require('@11ty/eleventy-img');
const rss = require('@11ty/eleventy-plugin-rss');
module.exports = function (eleventyConfig) {
eleventyConfig.setServerOptions({
watch: ['dist/**/*'],
port: 3000,
});
// Use Nunjucks as a template engine
let nunjucksEnvironment = new Nunjucks.Environment(
new Nunjucks.FileSystemLoader(['src/_includes', 'src/_layouts'], {
watch: process.argv.includes('--serve'),
})
);
eleventyConfig.setLibrary('njk', nunjucksEnvironment);
// Add extra features to Nunjucks templates
eleventyConfig.addNunjucksShortcode('image', imageShortcode);
eleventyConfig.addNunjucksGlobal('classNames', classNamesFunction);
eleventyConfig.addFilter('formatDate', formatDate);
eleventyConfig.addFilter('splitLines', splitLines);
// Minify HTML output
eleventyConfig.addTransform('minify', require('./lib/transforms/minify.js'));
// Copy static assets to dist
eleventyConfig.addPassthroughCopy('./src/favicon.ico');
eleventyConfig.addPassthroughCopy('./src/assets/images');
eleventyConfig.addPassthroughCopy('./src/assets/icons');
eleventyConfig.addPassthroughCopy('./src/assets/fonts');
// Vendor plugins
eleventyConfig.addPlugin(syntaxHighlight, {
templateFormats: ['md'],
});
eleventyConfig.addPlugin(rss);
// Build images for open-graph
eleventyConfig.on('afterBuild', () => {
const socialPreviewImagesDir = './dist/assets/images/_generated/og/';
fs.readdir(socialPreviewImagesDir, function (err, files) {
if (files.length > 0) {
files.forEach(async function (filename) {
if (filename.endsWith('.svg')) {
let imageUrl = socialPreviewImagesDir + filename;
await Image(imageUrl, {
formats: ['jpeg'],
outputDir: './src/assets/images/_generated/og/',
filenameFormat: function (id, src, width, format, options) {
let outputFilename = filename.substring(0, filename.length - 4);
return `${outputFilename}.${format}`;
},
});
}
});
}
});
});
return {
dir: {
input: 'src',
output: 'dist',
layouts: '_layouts',
},
templateFormats: ['njk', 'md'],
markdownTemplateEngine: 'njk',
passthroughFileCopy: true,
};
};