My personal website has gone through a number of iterations over the years. Most of the time it has been a static landing page showing some projects I've worked on and some contact details. Nothing too fancy.
In the past I've used GitHub Pages with the static site generator Jekyll for my site. While Jekyll is useful, it's very prescriptive in the way it wants you to store files.
With yet another iteration of my site, I decided to create my own static site generator, rather than using an existing tool.
bssg
is yet another static site generator.
You can think of a static site generator as a type of build tool, specifically for generating static websites.
Static websites are very simple. They're just a bunch of HTML files stored on a server.
Now, you could create an entire website by writing HTML manually. That quickly becomes a pain. Changing your website log means changing every page that has the website logo in it.
Instead, you can write your website in a format that's easy to write, then use a static website generator to convert that into HTML. You can also do things like have your logo in one file and reuse that file everywhere else. To change your logo, just change that file and every page on your website will update automatically!
Install bssg
using npm
:
npm install -g bssg
bssg
exposes a number of useful functions as a single command-line executable.
The output of each function goes to stdout by default. You can redirect the output using the >
operator.
You can execute bssg
with no arguments to get the list of supported functions:
Usage: bssg [options] [command]
Brad's Static Website Generator
Options:
-V, --version output the version number
-h, --help display help for command
Commands:
lessc <input-file> compile a less file
markdownc <input-file> [extends-file] compile a markdown file
pugc <input-file> [locals-file] compile a pug file
help [command] display help for command
Compiles a .less
file into CSS.
# reads a less file, converts it to CSS, and writes it to style.css
bssg lessc style.less > style.css
Compiles a markdown file into HTML
# reads a markdown file, converts it to HTML, and writes it to blog.html
bssg markdownc blog.md > blog.html
# reads a markdown file, converts it to HTML,
# compiles a pug file, injects the compiled markdown into it,
# and (finally) writes it to blog.html
# replaces BLOCK_CONTENT in the pug file
bssg markdownc blog.md blog.pug > blog.html
Compiles a pug file into HTML
# reads a pug file, converts it to HTML and writes it to index.html
bssg pugc index.pug > index.html
# reads a pug file, using a JSON file as the locals,
# and writes it to index.html
bssg pugc index.pug locals.json > index.html