60 lines
1.3 KiB
JavaScript
60 lines
1.3 KiB
JavaScript
|
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...")
|
||
|
|
||
|
const { css } = sass.compile(
|
||
|
"./src/main.scss",
|
||
|
{
|
||
|
sourceMap: false,
|
||
|
alertColor: true,
|
||
|
style: "compressed"
|
||
|
}
|
||
|
)
|
||
|
|
||
|
console.log("Compile done! Saving changes...")
|
||
|
|
||
|
fs.writeFileSync(
|
||
|
"./out/main.css",
|
||
|
css
|
||
|
)
|
||
|
|
||
|
console.log("Saved!")
|
||
|
})
|
||
|
|
||
|
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!"))
|