md-toy-blog
Version:
Very simple Markdown blog: serves your md as html without fancy databases. You will only spend time writing the actual data.
182 lines (142 loc) • 6.66 kB
Markdown
# Markdown Toy Blog
- Serves markdown files as an html blog.
- Uses markdown filenames as url-post-slugs.
- Takes information from the non standard markdown header:
```md
---
title: My post title
myVariable: this will be passed to the corresponding html template
---
My blog post content goes here.
...
```
- You can add your own HTML templates, js and css styling.
**IMPORTANT**: your files have to live in 3 folders (you can change their names using _environment variables_, see the section environment variables):
1. `./content`: markdown blog posts live here
2. `./views`: html view templates containing mostachito references like `{{ myVariable }}`
3. `./static`: can have subdirectories `./static/css`, `./static/js`, `./static/img` etc.
## Installation
There are two ways of using this package either:
1. as a **node_module**: `npm i md-toy-blog`
2. by cloning the **repo** `git clone https://github.com/gbili/md-toy-blog.git`
## 1. Installation as a `node_module`
Let's say the root directory of your blog is `<my_blog>`, then your blog posts will have to be in a subdirectory called `content`:
```text
<my_blog>/
|_ content/
|_ my-first-post.md
|_ my-second-post.md
|_ unshakable-truths-about-life.md
|_ etc.md
```
**IMPORTANT**: it is a requirement that **your markdown posts be contained in a sub directory called `content`** (unless you change the envvar `MTB_MD_BLOG_POSTS_DIRNAME`)
Now that we have a structure like this `./<my_blog>/content`, go to the `<my_blog>` directory and install this package:
```bash
cd <my_blog>
npm i md-toy-blog
```
Once everything is installed, it should work out of the box with.
```bash
# generates the json files list list
node ./node_modules/md-toy-blog/build/src/compile.js
# run the app
node ./node_modules/md-toy-blog/build/src/index.js
```
**IMPORTANT**: look up the section _Skeleton blog project_ to get a skeleton directory structure and a `package.json` with the two commands above as scripts, so you can quickly run `npm run build && npm run serve` instead.
## 2. Installation as a `repo`
```bash
git clone https://github.com/gbili/md-toy-blog.git
cd md-toy-blog
npm i
```
You can now place your blog posts in `content` dir, your views in `views` and your static files in `static`.
Now run the blog:
```bash
npm run build
npm run serve
```
## Environment variables
There are a few environment variables that allow you to customize _Md toy blog_'s behaviour, they are the following:
- `PORT`
- default: `3100`
- the port under which your blog will be available (e.g. `http://localhost:3100`)
- `MTB_COMPILED_USER_CONTENT_DIRNAME`
- default: `<MTB_USER_PROJECT_ROOT_DIR>/compiled_user_content`
- the absolute path of where the list of files that are to be served will be stored
- `MTB_ENV`
- `clone` | `module`
- if you cloned the repo from github it will be `clone`, if you installed the module via `npm i <MTB_PACKAGE_NAME>` it will be `module`
- `MTB_MD_BLOG_POSTS_DIRNAME`
- default: `<MTB_USER_PROJECT_ROOT_DIR>/content`
- absolute path of where you store your blog posts, must be readable by node
- `MTB_MISSING_REF_VALUE_REPLACEMENT`
- default: `<strong style="color: red;">THIS_IS_A_DUMMY_VAL_FOR_A_MISSING_REF</strong>`
- Whenever a _view template_ references a key that is missing in the _data_ passed to mostachito, it will be replaced by `<MTB_MISSING_REF_VALUE_REPLACEMENT>`
- `MTB_PACKAGE_NAME`
- default: `md-toy-blog`
- if you decide to change this package's name
- `MTB_POST_PREVIEW_LENGTH`
- default: `70`
- controls the max length of the post previews in Home page's post list
- `MTB_ROOT_DIR`
- the absolute path to this project's directory. Differs depending on `<MTB_ENV>`
- `MTB_STATIC_FILES_DIRNAME`
- default: `<MTB_USER_PROJECT_ROOT_DIR>/static` if you have created that dir, or `<MTB_PROJECT_ROOT_DIR>/static` otherwise.
- where you store your static files, uses the default ones if define none.
- `MTB_USER_CUSTOM_CONFIG_PATH`:
- default: `<MTB_USER_PROJECT_ROOT_DIR>/<MTB_PROJECT_NAME>.config.js`
- where you can define custom keys or override keys in `appConfig`
- `MTB_USER_PROJECT_ROOT_DIR`:
- the directory in which you normally would have your `.git` directory. where you normally would have your `content`, `static`, `views` and `user_compiled_dir`
- `MTB_VIEW_TEMPLATES_DIRNAME`
- default: `<MTB_USER_PROJECT_ROOT_DIR>/views` if you have created that dir, or `<MTB_PROJECT_ROOT_DIR>/views` otherwise.
- where your `.html` templates should be placed. They should be named after the `controller/action` that handles their data (e.g. `blogPostController.ts` should have an html template named `blog-post.html`).
## Skeleton Blog Project
When you want to use `md-toy-blog` as an **npm module** it is more practical to have a `package.json` with a few scripts to help you with updating your blog whenever you write new posts.
> If you want to fast forward clone the [skeleton blog project](https://github.com/gbili/md-toy-blog-skeleton) and follow the `README` there, basically it tells you to:
```bash
git clone https://github.com/md-toy-blog-skeleton.git
cd md-toy-blog-skeleton
```
The command above will get you a directory structure with a `package.json` that looks like this :
```json
{
"name": "md-toy-blog-skeleton",
"version": "0.0.0-development",
"description": "This is the skeleton for your md-toy-blog. Git clone this and run `npm buid && npm serve`",
"scripts": {
"serve": "node ./node_modules/md-toy-blog/build/src/index.js",
"build": "node ./node_modules/md-toy-blog/build/src/compile.js",
"restart": "npm run build && npm run serve"
},
"repository": {
"type": "git",
"url": "https://github.com/gbili/md-toy-blog-skeleton.git"
},
"keywords": [
"nodejs",
"templating",
"moustache",
"simple",
"blog",
"markdown",
"minimal"
],
"author": "Guillermo Pages <mail@guillermo.at> (https://guillermo.at)",
"license": "MIT",
"bugs": {
"url": "https://github.com/gbili/md-toy-blog-skeleton/issues"
},
"homepage": "https://github.com/gbili/md-toy-blog-skeleton#readme",
"dependencies": {
"md-toy-blog": "latest",
},
}
```
Once you have such a `package.json` file you can proceed with the installation.
```bash
npm i
npm run restart
```
After these commands your blog should be available in your browser at [http://localhost:3100](http://localhost:3100) of course you will need to place some of your own markdown posts in the `content`'s directory, and remove the sample ones.
**IMPORTANT**: **DO NOT FORGET TO `npm run restart`** after you create a new blog post.