refactor: moved plugins to own folders
This commit is contained in:
parent
a212df96dd
commit
63bd438e45
6 changed files with 235 additions and 223 deletions
68
lib/cache-busting/plugin.js
Normal file
68
lib/cache-busting/plugin.js
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
const fs = require("fs");
|
||||
const crypto = require("crypto");
|
||||
const path = require("path");
|
||||
|
||||
const fileHashCache = {};
|
||||
const getFileHash = (file, dir = "css") => {
|
||||
const cacheKey = `${dir}/${file}`;
|
||||
if (fileHashCache[cacheKey]) return fileHashCache[cacheKey];
|
||||
|
||||
const filePath = path.join(__dirname, '..', '..', dir, file);
|
||||
try {
|
||||
const content = fs.readFileSync(filePath, "utf-8");
|
||||
const hash = crypto.createHash("md5").update(content).digest("hex").slice(0, 8);
|
||||
fileHashCache[cacheKey] = hash;
|
||||
return hash;
|
||||
} catch (e) {
|
||||
console.warn(`Could not hash file: ${file} in ${dir}`);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const copyHashedFiles = (sourceDir, outputDir) => {
|
||||
if (!fs.existsSync(sourceDir)) return;
|
||||
|
||||
if (!fs.existsSync(outputDir)) {
|
||||
fs.mkdirSync(outputDir, { recursive: true });
|
||||
}
|
||||
|
||||
const dirName = path.basename(sourceDir);
|
||||
const files = fs.readdirSync(sourceDir);
|
||||
for (const file of files) {
|
||||
const hash = getFileHash(file, dirName);
|
||||
const ext = path.extname(file);
|
||||
const base = path.basename(file, ext);
|
||||
const hashedName = `${base}${hash == null ? '' : `.${hash}`}${ext}`;
|
||||
|
||||
fs.copyFileSync(
|
||||
path.join(sourceDir, file),
|
||||
path.join(outputDir, hashedName)
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
const cacheBustingPlugin = (eleventyConfig, { rootDir }) => {
|
||||
eleventyConfig.addFilter("fileHash", (file, dir = "css") => {
|
||||
const hash = getFileHash(file, dir);
|
||||
const ext = path.extname(file);
|
||||
const base = path.basename(file, ext);
|
||||
return `/${dir}/${base}.${hash}${ext}`;
|
||||
});
|
||||
|
||||
eleventyConfig.on("eleventy.before", async () => {
|
||||
// Copy CSS files with hashes
|
||||
const cssDir = path.join(rootDir, "css");
|
||||
const outputCssDir = path.join(rootDir, "_site", "css");
|
||||
copyHashedFiles(cssDir, outputCssDir);
|
||||
|
||||
// Copy assets files with hashes
|
||||
const assetsDir = path.join(rootDir, "assets");
|
||||
const outputAssetsDir = path.join(rootDir, "_site", "assets");
|
||||
copyHashedFiles(assetsDir, outputAssetsDir);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
cacheBustingPlugin,
|
||||
getFileHash,
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue