1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00

add pretty message if port already in use(#927) (#932)

* add pretty message if port already use(#927)

* fix console async nature

* fix linter

* clean callbacks code

* Check package.json for the startup script

* fix path to package

* omit callback

* remove extra check, code execute in try block

* + reason for change start listen port of node http

* remove extra code for search package
This commit is contained in:
Artem Samofalov 2017-02-02 03:36:23 +07:00 committed by Tim Neutkens
parent ec2c8c6784
commit 2f7d743050
3 changed files with 18 additions and 7 deletions

View file

@ -2,9 +2,10 @@
import 'source-map-support/register'
import { resolve, join } from 'path'
import parseArgs from 'minimist'
import { existsSync } from 'fs'
import { existsSync, readFileSync } from 'fs'
import Server from '../server'
import { printAndExit } from '../lib/utils'
import pkgUp from 'pkg-up'
process.env.NODE_ENV = process.env.NODE_ENV || 'development'
@ -61,6 +62,15 @@ srv.start(argv.port)
}
})
.catch((err) => {
if (err.code === 'EADDRINUSE') {
let errorMessage = `Port ${argv.port} is already in use.`
const pkgAppPath = pkgUp.sync('.')
const appPackage = JSON.parse(readFileSync(pkgAppPath, 'utf8'))
const nextScript = Object.entries(appPackage.scripts).find(scriptLine => scriptLine[1] === 'next')
if (nextScript) errorMessage += `\nUse \`npm run ${nextScript[0]} -- -p <some other port>\`.`
console.error(errorMessage)
} else {
console.error(err)
process.exit(1)
}
process.nextTick(() => process.exit(1))
})

View file

@ -70,6 +70,7 @@
"mkdirp-then": "1.2.0",
"mz": "2.6.0",
"path-match": "1.2.4",
"pkg-up": "1.0.0",
"react": "15.4.2",
"react-dom": "15.4.2",
"react-hot-loader": "3.0.0-beta.6",

View file

@ -119,10 +119,10 @@ export default class Server {
await this.prepare()
this.http = http.createServer(this.getRequestHandler())
await new Promise((resolve, reject) => {
this.http.listen(port, (err) => {
if (err) return reject(err)
resolve()
})
// This code catches EADDRINUSE error if the port is already in use
this.http.on('error', reject)
this.http.on('listening', () => resolve())
this.http.listen(port)
})
}