/
eleventy.config.js
107 lines (93 loc) · 3.6 KB
/
eleventy.config.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
require("dotenv").config();
const pluginDirectoryOutput = require('@11ty/eleventy-plugin-directory-output');
const pluginEmbedYouTube = require('eleventy-plugin-youtube-embed');
const pluginNavigation = require('@11ty/eleventy-navigation');
const pluginReadingTime = require('eleventy-plugin-reading-time');
const pluginRss = require('@11ty/eleventy-plugin-rss');
const pluginSyntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight');
const pluginWebc = require('@11ty/eleventy-plugin-webc');
const { EleventyRenderPlugin, EleventyHtmlBasePlugin } = require('@11ty/eleventy');
// markdown config
const markdownLib = require('./config/plugins/markdown.js');
// module import shortcodes
const { currentYear, image, opengraphSource } = require('./config/shortcodes/index.js');
// module import collections
const { getAllTags } = require('./config/collections/index.js');
// module import filters
const {
collectionCategory,
collectionHead,
currentPage,
htmlDate,
pageTags,
postExcerpt,
readableDate,
year,
postCountForYear,
postCountForMonth,
popularPosts,
pageStats,
} = require('./config/filters/index.js');
module.exports = function (eleventyConfig) {
eleventyConfig.setQuietMode(true);
eleventyConfig.setDataDeepMerge(true);
// setup plugins
eleventyConfig.addPlugin(pluginDirectoryOutput);
eleventyConfig.addPlugin(pluginEmbedYouTube);
eleventyConfig.addPlugin(pluginNavigation);
eleventyConfig.addPlugin(pluginReadingTime);
eleventyConfig.addPlugin(pluginRss);
eleventyConfig.addPlugin(pluginSyntaxHighlight);
eleventyConfig.addPlugin(pluginWebc, {
components: 'src/_includes/components/*.webc',
useTransform: true,
});
eleventyConfig.addPlugin(EleventyRenderPlugin);
eleventyConfig.addPlugin(EleventyHtmlBasePlugin);
// copy static assets
eleventyConfig.addPassthroughCopy({
'content/images': 'assets/images',
'src/_assets': 'assets',
'src/_includes/components/*.js': 'assets/js/',
'node_modules/speedlify-score/speedlify-score.js': 'assets/js/speedlify-score.js',
'node_modules/@11ty/is-land/is-land.js': 'assets/js/is-land.js',
});
eleventyConfig.addPassthroughCopy('admin');
eleventyConfig.addWatchTarget('./src/_css/');
eleventyConfig.addWatchTarget('config');
// short codes
eleventyConfig.addShortcode('currentYear', currentYear);
eleventyConfig.addShortcode('opengraphImageSrc', opengraphSource);
eleventyConfig.addShortcode('image', image);
// filters
eleventyConfig.addFilter('excerpt', postExcerpt);
eleventyConfig.addFilter('readableDate', readableDate);
eleventyConfig.addFilter('htmlDateString', htmlDate);
eleventyConfig.addFilter('head', collectionHead);
eleventyConfig.addFilter('category', collectionCategory);
eleventyConfig.addFilter('pageTags', pageTags);
eleventyConfig.addFilter('currentPage', currentPage);
eleventyConfig.addFilter('year', year);
eleventyConfig.addFilter('postCountForYear', postCountForYear);
eleventyConfig.addFilter('postCountForMonth', postCountForMonth);
eleventyConfig.addFilter('popularPosts', popularPosts);
eleventyConfig.addFilter('pageStats', pageStats);
// collections
eleventyConfig.addCollection('tagList', getAllTags);
// transforms
eleventyConfig.addPlugin(require('./config/transforms/compress-html.js'));
// markdown config
eleventyConfig.setLibrary('md', markdownLib);
return {
dir: {
input: 'content',
output: 'dist',
includes: '../src/_includes',
layouts: '../src/_layouts',
data: '../src/_data',
},
markdownTemplateEngine: 'njk',
htmlTemplateEngine: 'njk',
templateFormats: ['md', 'njk', 'html'],
};
};