import chokidar from "chokidar" import express from "express" import fs from "fs" import njk from "nunjucks" import sass from "sass" const server = express() njk.configure( "./web", { autoescape: true, express: server, lstripBlocks: true, trimBlocks: true, watch: true } ) chokidar.watch("./src").on("change", () => { console.log("Detected changes in SCSS! Recompiling...") try { const { css } = sass.compile( "./src/main.scss", { sourceMap: false, alertColor: true, style: "compressed" } ) console.log("Compile done! Saving changes...") if (!fs.existsSync("./out")) fs.mkdirSync("./out") fs.writeFileSync( "./out/main.css", css ) console.log("Saved!") } catch (error) { console.log("Error while compiling!") console.error(error) } }) server.use("/assets", express.static("./out")) server.get( "*", (req, res) => { const path = req.path .replace(/^\/|\.\.+|\/$/g, "") if (fs.existsSync(`web/pages/${path}.njk`)) return res.render(`pages/${path}.njk`) if (fs.existsSync(`web/pages/${path}/index.njk`)) return res.render(`pages/${path}/index.njk`) res.status(404).send("Not Found") } ) server.listen(12345, () => console.log("Dev server started and listening on port 12345!"))