93 lines
1.9 KiB
JavaScript
93 lines
1.9 KiB
JavaScript
const chokidar = require("chokidar");
|
|
const fs = require("fs");
|
|
|
|
const pkg = require("./package.json");
|
|
const EleventyDevServer = require("./server.js");
|
|
|
|
const Logger = {
|
|
info: function(...args) {
|
|
console.log( "[11ty/eleventy-dev-server]", ...args );
|
|
},
|
|
error: function(...args) {
|
|
console.error( "[11ty/eleventy-dev-server]", ...args );
|
|
},
|
|
fatal: function(...args) {
|
|
Logger.error(...args);
|
|
process.exitCode = 1;
|
|
}
|
|
};
|
|
|
|
Logger.log = Logger.info;
|
|
|
|
class Cli {
|
|
static getVersion() {
|
|
return pkg.version;
|
|
}
|
|
|
|
static getHelp() {
|
|
return `Usage:
|
|
|
|
eleventy-dev-server
|
|
eleventy-dev-server --dir=_site
|
|
eleventy-dev-server --port=3000
|
|
|
|
Arguments:
|
|
|
|
--version
|
|
|
|
--dir=.
|
|
Directory to serve (default: \`.\`)
|
|
|
|
--input (alias for --dir)
|
|
|
|
--port=8080
|
|
Run the web server on this port (default: \`8080\`)
|
|
Will autoincrement if already in use.
|
|
|
|
--domdiff (enabled, default)
|
|
--domdiff=false (disabled)
|
|
Apply HTML changes without a full page reload.
|
|
|
|
--help`;
|
|
}
|
|
|
|
static getDefaultOptions() {
|
|
return {
|
|
port: "8080",
|
|
input: ".",
|
|
domDiff: true,
|
|
}
|
|
}
|
|
|
|
async serve(options = {}) {
|
|
this.options = Object.assign(Cli.getDefaultOptions(), options);
|
|
|
|
this.server = EleventyDevServer.getServer("eleventy-dev-server-cli", this.options.input, {
|
|
// TODO allow server configuration extensions
|
|
showVersion: true,
|
|
logger: Logger,
|
|
domDiff: this.options.domDiff,
|
|
|
|
// CLI watches all files in the folder by default
|
|
// this is different from Eleventy usage!
|
|
watch: [ this.options.input ],
|
|
});
|
|
|
|
this.server.serve(this.options.port);
|
|
|
|
// TODO? send any errors here to the server too
|
|
// with server.sendError({ error });
|
|
}
|
|
|
|
close() {
|
|
if(this.server) {
|
|
this.server.close();
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
Logger,
|
|
Cli
|
|
}
|