dusg

Deluxe Universal Site Generator

Usage no npm install needed!

<script type="module">
  import dusg from 'https://cdn.skypack.dev/dusg';
</script>

README

DUSG

Deluxe Universal Site Generator

Build Status Coverage Status

Design Goals

DUSG is a static site generator that uses JavaScript instead of templating languages. It uses the file system instead of a database.

What it Does

  • Provides a Command Line Interface and a JavaScript API
  • Reads Markdown files in a source directory
  • Parses YAML in each file into the key metadata
  • Parses Markdown in each file into the key html
  • Includes a path key for the output of each file
  • Includes a rootRelativeUrl key for each file
  • Includes a stats key for each file's information
  • Creates an array of parsed files into the key pageObjects
  • Uses a JavaScript function instead of templating languages
  • Writes files to a destination directory

Installation

npm install --save-dev dusg

Formatting Source Files

Source files must end with the .md extension. A source file may begin with YAML which should begin and end with three hyphens (---). Markdown within the file will be parsed and turned into HTML.

Example Source File

---
title: An Example Source File
author: Luke Teaford
---

# Hello, World!

The metadata can contain whatever you want.

Writing Template Functions

A suitable template function is a callback that will receive a page object as its only argument. The page object has an html key that contains the markdown parsed as HTML, a metadata key that contains the YAML parsed as a JavaScript object, a path key that contains the output path of the file, and an array called pageObjects which contains each pageObject.

Example Template Function

const exampleTemplate = function (aPageObject) {
  const { html, metadata } = aPageObject
  const { title, author } = metadata
  return `<!DOCTYPE html>
<title>${title} - ${author}</title>
${html}`
}

Command Line Interface

# Simplest usage
npx dusg --src='./your-source' --dest='./your-destination' --template='./your-template.js'

# Aliases are supported
npx dusg -s './your-source-directory' -d './your-destination-directory' -t './your-template.js'

# Show detailed documentation
npx dusg --help

JavaScript API

const dusg = require('dusg')
const aTemplateFunction = require('./your-template.js')

dusg({
  src: './your-source-directory',
  dest: './your-destination-directory',
  template: aTemplateFunction
})

Other Options

  • cleanUrls means each file will be written to a directory so ./about-me.md would become ./about-me/index.html. This is enabled by default.
  • extension is the file extension to write. The default is .html.