|
| 1 | +const sitemap = require('@quasibit/eleventy-plugin-sitemap'); |
| 2 | +const htmlmin = require('html-minifier-terser'); |
| 3 | +const fs = require('fs'); |
| 4 | + |
| 5 | +function minifyJsonLd(content) { |
| 6 | + return content.replace( |
| 7 | + /(<script type="application\/ld\+json">)([\s\S]*?)(<\/script>)/g, |
| 8 | + (_, openTag, jsonContent, closeTag) => { |
| 9 | + const minifiedJson = JSON.stringify(JSON.parse(jsonContent)); |
| 10 | + return `${openTag}${minifiedJson}${closeTag}`; |
| 11 | + } |
| 12 | + ); |
| 13 | +} |
| 14 | + |
| 15 | +module.exports = (eleventyConfig) => { |
| 16 | + // Passthrough copy for static assets |
| 17 | + eleventyConfig.addPassthroughCopy('src/assets'); |
| 18 | + |
| 19 | + const hostname = 'https://misakisota.github.io/'; |
| 20 | + |
| 21 | + // Add sitemap plugin |
| 22 | + eleventyConfig.addPlugin(sitemap, { |
| 23 | + sitemap: { |
| 24 | + hostname: hostname, |
| 25 | + }, |
| 26 | + }); |
| 27 | + |
| 28 | + eleventyConfig.on('afterBuild', () => { |
| 29 | + //Replace url in Sitemap |
| 30 | + const sitemap = fs.readFileSync('_site/sitemap.xml', 'utf8'); |
| 31 | + const sitemapWithHostname = sitemap.replace(/https:\/\/misakisota.github.io\//g, hostname + 'tools/'); |
| 32 | + fs.writeFileSync('_site/sitemap.xml', sitemapWithHostname); |
| 33 | + }); |
| 34 | + |
| 35 | + eleventyConfig.on('afterBuild', () => { |
| 36 | + const CleanCSS = require('clean-css'); |
| 37 | + |
| 38 | + // Run me after the build ends |
| 39 | + var inputFile = 'src/assets/css/style.css'; |
| 40 | + var input = fs.readFileSync(inputFile, 'utf8'); |
| 41 | + var output = new CleanCSS().minify(input); |
| 42 | + fs.writeFile('_site/assets/css/style.css', output.styles, function (err) { |
| 43 | + if (err) return console.log('Error minifying style.css' + err); |
| 44 | + }); |
| 45 | + }); |
| 46 | + |
| 47 | + // Minify HTML output |
| 48 | + eleventyConfig.addTransform('htmlmin', function (content, outputPath) { |
| 49 | + if (outputPath && outputPath.endsWith('.html')) { |
| 50 | + content = minifyJsonLd(content); |
| 51 | + let minified = htmlmin.minify(content, { |
| 52 | + removeComments: true, |
| 53 | + collapseWhitespace: true, |
| 54 | + removeAttributeQuotes: true, |
| 55 | + minifyJS: true, |
| 56 | + minifyCSS: true, |
| 57 | + }); |
| 58 | + return minified; |
| 59 | + } |
| 60 | + |
| 61 | + return content; |
| 62 | + }); |
| 63 | + |
| 64 | + // Define directories |
| 65 | + return { |
| 66 | + dir: { |
| 67 | + input: 'src', |
| 68 | + output: '_site', |
| 69 | + layouts: 'layouts', |
| 70 | + includes: 'includes', |
| 71 | + data: 'data', |
| 72 | + }, |
| 73 | + passthroughFileCopy: true, |
| 74 | + }; |
| 75 | +}; |
0 commit comments