Awesome
Mini Site Generator
Because I just wanted a really simple static site generator.
npm install mini-site-generator -D
or if you want to run it in your command line
npm i mini-site-generator -g
Make a file, index.page.js
:
module.exports = function(){
return '<p>tada!</p>';
}
Now run the build, msg
:
index.html
:
<p>tada!</p>
Simple! The page.js file exports a function that returns a string. That string is then saved into a .html file of the same name. Because the page file is just JavaScript, you can do pretty much anything you want in there!
Defining src & dist folders
Pass in the relative paths of your source and distribution folders with the -io
flag, "in" first "out" second:
msg -io ./src/ ./dist/
Before:
./dist/
./src/
├──index.page.js
├──about.page.js
├──/funFolder/
| ├──fun.page.js
After:
./dist/
├──index.html
├──about.html
├──/funFolder/
| ├──fun.html
./src/
├──index.page.js
├──about.page.js
├──/funFolder/
| ├──fun.page.js
Alternativly you may wish to keep your source and distribution files together. Just pass the same value twice:
msg -io ./docs/ ./docs/
Before:
./docs/
├──index.page.js
├──about.page.js
├──/funFolder/
| ├──fun.page.js
After:
./docs/
├──index.html - Hello!
├──index.page.js
├──about.html - hello
├──about.page.js
├──/funFolder/
| ├──fun.html - HELLO!!
| ├──fun.page.js
You can even run both if you want to watch the world burn: msg -io ./src/ ./dist/ -io ./docs/ ./docs/
Syntax Highlighting
Different editors do this in different ways. VS Code requires a plugin, Atom does not (according to a quick google). However it happens, in most cases you will need to add the html
tag:
module.exports = function(){
return html`
<p>Me Syntax be Higlighted!</p>
`;
}
Note that tags have to be defined functions. To make life a little easier I've added a global defenition for html so it won't throw undefined errors at you.
How does it work?
I'm glad you asked! Time for sudocode.
//pass it a directory
goIntoFolder(folder){
//get all the .page.js files in this directory
pages = getAllPagesFrom(folder)
pages.forEach(page){
//run the "page"
markup = page()
//save the result
saveToDist(markup)
}
//now get all the folders in this folder
folderChildren = getAllFoldersFrom(folder)
folderChildren.forEach(childFolder){
//go into each of them and do the same thing
goIntoFolder(childFolder)
}
}
The real code is a little different, but that's the essence of it. Have a read if you wish!