blogpost-fineweb-v1 / webpack.config.js
hynky's picture
hynky HF staff
optimize sripts
3d1c8d1
raw
history blame
3.12 kB
const path = require("path");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const CopyPlugin = require("copy-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CompressionPlugin = require("compression-webpack-plugin");
const HtmlWebpackChangeAssetsExtensionPlugin = require("html-webpack-change-assets-extension-plugin");
const COLOR_KEYS = ["color", "bgColor", "fillcolor"];
const transformDataColors = async (data, path) => {
const {getNamedColor} = await import('./src/colors.mjs');
// if not json file, return
if (!path.endsWith(".json")) {
return data;
}
console.log(path)
const parsedData = JSON.parse(data);
// Change the color of the data
const deepIterateAndSetColor = (obj) => {
Object.keys(obj).forEach((key) => {
if (typeof obj[key] === "object" && obj[key] !== null) {
deepIterateAndSetColor(obj[key]);
} else if (COLOR_KEYS.includes(key)) {
// The color is always in format color opacity
const [colorName, opacity] = obj[key].trim().split(/\s+/);
console.log(`key: ${key} in file ${path} changed to ${getNamedColor(colorName, parseFloat(opacity))}`);
obj[key] = getNamedColor(colorName, parseFloat(opacity));
}
});
};
deepIterateAndSetColor(parsedData);
return JSON.stringify(parsedData);
};
module.exports = {
entry: {
distill: "./src/distill.js",
main: "./src/index.js",
},
output: {
filename: "[name].bundle.js", // The output file
path: path.resolve(__dirname, "dist"), // Output directory
},
module: {
rules: [
// { test: /\.css$/, use: ["style-loader", "css-loader"] },
{
test: /\.(js|mjs)$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"],
},
},
},
],
},
plugins: [
new CleanWebpackPlugin(),
new CopyPlugin({
patterns: [
{
from: "assets",
to: "assets",
transform: transformDataColors,
},
{ from: "src/style.css", to: "style.css" },
{ from: "src/bibliography.bib", to: "bibliography.bib" },
{ from: "src/index.html", to: "index.html" },
],
}),
],
devtool: process.env.NODE_ENV === 'production' ? 'source-map' : 'eval-source-map',
devServer: {
static: "./dist", // Serve files from the 'dist' directory
open: process.env.NODE_ENV !== 'production', // Automatically open the browser unless in production
hot: process.env.NODE_ENV !== 'production', // Enable hot module replacement unless in production
},
mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
};
console.log(process.env.NODE_ENV)