feat: simple site build and dev server
This commit is contained in:
@@ -1 +1,75 @@
|
||||
// package code goes here
|
||||
import http from 'http';
|
||||
import fs from 'fs';
|
||||
import ejs from 'ejs';
|
||||
|
||||
const srcFile = 'src/index.html';
|
||||
const destFile = 'dist/index.html';
|
||||
|
||||
function build() {
|
||||
const data = {};
|
||||
const options = {};
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
ejs.renderFile(srcFile, data, options, (err, str) => {
|
||||
if (err) reject(err);
|
||||
else {
|
||||
fs.writeFile(destFile, str, er => {
|
||||
if (er) reject(er);
|
||||
else {
|
||||
console.log(`Site built: ${destFile}`);
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function serve() {
|
||||
const PORT = '3000';
|
||||
|
||||
await build();
|
||||
|
||||
http
|
||||
.createServer((req, res) => {
|
||||
fs.readFile(destFile, (err, str) => {
|
||||
if (err) {
|
||||
res.writeHead(500, { 'Content-Type': 'text/plain' });
|
||||
res.end('Failed :(');
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' });
|
||||
res.end(str);
|
||||
});
|
||||
})
|
||||
.listen(PORT, () => {
|
||||
console.log(`Server listening on http://localhost:${PORT}`);
|
||||
});
|
||||
}
|
||||
|
||||
export default async function() {
|
||||
const cmds = ['build', 'serve'];
|
||||
const cmd = process.argv.splice(2)[0];
|
||||
|
||||
try {
|
||||
switch (cmd) {
|
||||
case 'build': {
|
||||
await build();
|
||||
break;
|
||||
}
|
||||
case 'serve': {
|
||||
await serve();
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
const msg = `Please use one of ${cmds.map(c => `"${c}"`).join(', ')}`;
|
||||
if (cmd.length) console.error(`Unknown command "${cmd}". ${msg}`);
|
||||
else console.error(`No command provided. ${msg}`);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user