#!/usr/bin/env node import { join } from 'path' import { spawn } from 'cross-spawn' import { watchFile } from 'fs' const defaultCommand = 'dev' const commands = new Set([ defaultCommand, 'init', 'build', 'start' ]) let cmd = process.argv[2] let args if (commands.has(cmd)) { args = process.argv.slice(3) } else { cmd = defaultCommand args = process.argv.slice(2) } const bin = join(__dirname, 'next-' + cmd) const startProcess = () => { const proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] }) proc.on('close', (code) => process.exit(code)) proc.on('error', (err) => { console.error(err) process.exit(1) }) return proc } let proc = startProcess() if (cmd === 'dev') { watchFile(join(process.cwd(), 'next.config.js'), (cur, prev) => { if (cur.size > 0 || prev.size > 0) { console.log('\n> Found a change in next.config.js, restarting the server...') // Don't listen to 'close' now since otherwise parent gets killed by listener proc.removeAllListeners('close') proc.kill() proc = startProcess() } }) }