Skip to content

Commit 2f7d743

Browse files
dex157timneutkens
authored andcommitted
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
1 parent ec2c8c6 commit 2f7d743

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

bin/next-dev

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
import 'source-map-support/register'
33
import { resolve, join } from 'path'
44
import parseArgs from 'minimist'
5-
import { existsSync } from 'fs'
5+
import { existsSync, readFileSync } from 'fs'
66
import Server from '../server'
77
import { printAndExit } from '../lib/utils'
8+
import pkgUp from 'pkg-up'
89

910
process.env.NODE_ENV = process.env.NODE_ENV || 'development'
1011

@@ -61,6 +62,15 @@ srv.start(argv.port)
6162
}
6263
})
6364
.catch((err) => {
64-
console.error(err)
65-
process.exit(1)
65+
if (err.code === 'EADDRINUSE') {
66+
let errorMessage = `Port ${argv.port} is already in use.`
67+
const pkgAppPath = pkgUp.sync('.')
68+
const appPackage = JSON.parse(readFileSync(pkgAppPath, 'utf8'))
69+
const nextScript = Object.entries(appPackage.scripts).find(scriptLine => scriptLine[1] === 'next')
70+
if (nextScript) errorMessage += `\nUse \`npm run ${nextScript[0]} -- -p <some other port>\`.`
71+
console.error(errorMessage)
72+
} else {
73+
console.error(err)
74+
}
75+
process.nextTick(() => process.exit(1))
6676
})

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
"mkdirp-then": "1.2.0",
7171
"mz": "2.6.0",
7272
"path-match": "1.2.4",
73+
"pkg-up": "1.0.0",
7374
"react": "15.4.2",
7475
"react-dom": "15.4.2",
7576
"react-hot-loader": "3.0.0-beta.6",

server/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,10 @@ export default class Server {
119119
await this.prepare()
120120
this.http = http.createServer(this.getRequestHandler())
121121
await new Promise((resolve, reject) => {
122-
this.http.listen(port, (err) => {
123-
if (err) return reject(err)
124-
resolve()
125-
})
122+
// This code catches EADDRINUSE error if the port is already in use
123+
this.http.on('error', reject)
124+
this.http.on('listening', () => resolve())
125+
this.http.listen(port)
126126
})
127127
}
128128

0 commit comments

Comments
 (0)