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!
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/
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.
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!