2021-08-07 10:16:13 +02:00
|
|
|
%%-
|
|
|
|
title: qwik cms
|
|
|
|
header: qwik cms intro
|
2021-08-08 18:32:09 +02:00
|
|
|
date: 8th August 2021
|
2021-08-07 10:16:13 +02:00
|
|
|
-%%
|
|
|
|
|
|
|
|
# Introduction
|
|
|
|
BurnyLlama started working on this project as a part of [qwik](https://qwik.space).
|
|
|
|
We tried to find a good and simple CMS solution, but we couldn't really find something that
|
|
|
|
worked for and suited us. We decided to make our own, and that's when the `qwik-cms` repo was created.
|
|
|
|
|
|
|
|
## Basic ideas
|
|
|
|
We wanted to keep it simple, yet powerful. At first we only wanted to use *include/import statements*,
|
|
|
|
but later we came to the realization that you could add other QoL things, like automatically generating
|
|
|
|
a table of contents for articles.
|
|
|
|
|
|
|
|
We also want to make development of content be as fast as possible. Especially with when it comes to
|
|
|
|
writing articles. Writing articles in markdown can feel kinda nice as it (at least imo) saves a lot
|
|
|
|
of time compared to writing out HTML.
|
|
|
|
|
|
|
|
## Underlying technologies
|
|
|
|
Thanks to all the technologies used, the CMS is really hackable and can be used in different ways
|
|
|
|
depending on your liking. There are three main ways of creating content:
|
|
|
|
1. Normal HTML
|
|
|
|
2. Nunjacks (an HTML templating language)
|
|
|
|
3. Markdown
|
|
|
|
|
|
|
|
|
|
|
|
## Views on bloat
|
|
|
|
*This all sounds kinda bloated?*
|
|
|
|
I hear you asking... and yes, I am afraid this is a bit bloated (sadly). Although I wouldn't call it
|
|
|
|
bloated if you actually use the features. The project does pull in a few dependencies, and making the
|
|
|
|
system more modular could potentially make som of those dependencies optional, but as of now we
|
|
|
|
depend on:
|
|
|
|
* Express - the server framework
|
|
|
|
* nunjucks - the templating language that does very heavy lifting in this CMS.
|
|
|
|
* nunjucks-markdown - adds support for markdown in nunjucks
|
|
|
|
* marked - the actual renderer for the markdown (used by `nunjucks-markdown`)
|
|
|
|
* highlight.js - provides syntax highlighting for codeblocks in markdown.
|
|
|
|
* jsdom - makes us able to use DOM operations server-side (used to generate the table of contents)
|
|
|
|
* chokidar - used to reload nunjucks templates if they change on the disk (without having to restart the server)
|
|
|
|
|
|
|
|
So yes, we sure do have a lot of dependencies, but they are all used, so there are no dependencies just "lying around".
|
|
|
|
|
|
|
|
# Installation
|
|
|
|
The installation process will be quite trivial if you are used to node-based projects.
|
|
|
|
|
|
|
|
## Prerequesites
|
|
|
|
We will assume that you have `node` and `npm` installed already. Otherwise make sure to install those.
|
|
|
|
|
|
|
|
## Process
|
|
|
|
The process is really simple:
|
|
|
|
```bash
|
|
|
|
git clone https://git.qwik.space/BurnyLlama/qwik-cms
|
|
|
|
cd qwik-cms
|
|
|
|
npm i
|
|
|
|
node index.js
|
|
|
|
```
|
|
|
|
`npm i` installs all needed dependencies.
|
|
|
|
|
|
|
|
# Configuration
|
|
|
|
The CMS can be configured from `config.json` and the default config looks like this:
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"contentDir": "content",
|
|
|
|
"assetsDir": "assets",
|
|
|
|
|
|
|
|
"serverPort": "8789",
|
|
|
|
"serverName": "qwik"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Explanation
|
|
|
|
All of the options are kind of self-explanatory, but anyways:
|
|
|
|
|
|
|
|
### contentDir
|
|
|
|
Specifies which directory the content is in.
|
|
|
|
|
|
|
|
Default: `content`
|
|
|
|
|
|
|
|
### assetsDir
|
|
|
|
Specifies which directory the assets are in. These items will be statically available on (your site's)
|
|
|
|
`/assets/`. I recommend storing CSS, images, etc. here.
|
|
|
|
|
|
|
|
Default: `assets`
|
|
|
|
|
|
|
|
### serverPort
|
|
|
|
The port the server should run on.
|
|
|
|
|
|
|
|
Default: `8789`
|
|
|
|
|
|
|
|
### serverName
|
|
|
|
This can be accessed in any page/template by using `{{ serverName }}`
|
|
|
|
|
|
|
|
Default: `qwik`
|
|
|
|
|
|
|
|
# Usage
|