Files
mykb/src/index.js
2018-11-24 00:23:39 -06:00

61 lines
1.6 KiB
JavaScript

const http = require('http')
const path = require('path')
const Next = require('next')
const chokidar = require('chokidar')
const isDev = process.env.NODE_ENV !== 'production'
const next = Next({ dev: isDev, quiet: true })
let server = null
let creatingServer = false
// prepare next
next.prepare()
global.next = next
async function createServer() {
if (creatingServer) return
creatingServer = true
const { port } = await require('./server/util/config')
if (server) {
console.log('Restarting server...')
await new Promise(resolve => {
server.destroy(() => resolve())
})
}
try {
server = http.createServer(require('./server/server'))
isDev && require('server-destroy')(server)
server.listen(port)
server.once('listening', () => {
creatingServer = false
console.log(`Listening at http://127.0.0.1:${port}`)
})
} catch (err) {
console.error(err)
creatingServer = false
console.log('waiting for change to restart...')
}
}
if (isDev) {
// watch for server changes and hot reload server
// without having to reload next.js
const configPath = path.resolve('./config')
const utilPath = path.resolve('./src/util')
const serverPath = path.resolve('./src/server')
const watcher = chokidar.watch([serverPath, configPath, utilPath], {})
watcher.on('change', path => {
Object.keys(require.cache).forEach(key => {
if (key.indexOf(serverPath) > -1 || key.indexOf(utilPath) > -1) {
delete require.cache[key]
delete module.constructor._pathCache[key]
}
})
createServer()
})
}
createServer()