mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
* 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:
parent
ec2c8c6784
commit
2f7d743050
14
bin/next-dev
14
bin/next-dev
|
@ -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))
|
||||
})
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue