quick-static
Version:
Serve static files over http from Command Line Interface [npm](https://www.npmjs.com/package/quick-static)
85 lines (44 loc) • 1.45 kB
JavaScript
// references:
// https://bretkikehara.wordpress.com/2013/05/02/nodejs-creating-your-first-global-module/
require('colors')
const express = require('express')
const serveIndex = require('serve-index')
const path = require('path')
const fs = require('fs')
const args = process.argv.slice(2).reduce((acc, arg) => {
let [k, v] = arg.split('=')
acc[k] = v === undefined ? true : /true|false/.test(v) ? v === 'true' : /\d+/.test(v) ? Number(v) : v
return acc
}, {})
let [port = 8000] = process.argv.slice(2).filter(v => /\d+/.test(v)).map(parseFloat)
let [dir = '.'] = process.argv.slice(2).filter(v => /\.|\//.test(v))
dir = path.resolve(process.cwd(), dir)
if (!fs.existsSync(dir)) {
console.log(`${dir.red} is not a valid folder`)
process.exit()
}
console.log('quick-static:')
let app = express()
app.use('/', express.static(dir), serveIndex(dir, {'icons': true}))
function tryServer() {
app.listen(port, () => {
let localhost = `http://localhost:${port}`
console.log(` serving ${dir.blue}`)
console.log(` over ${localhost.red}`)
}).on('error', e => {
if (e.code === 'EADDRINUSE') {
if (args.auto) {
console.log(` (auto) the port ${port} is already used...`)
port++
if (port < 65536)
tryServer()
} else {
console.log(` oups! the port ${port} is already in use!`.red)
}
} else {
console.log(e)
}
})
}
tryServer()