(port: number, host: string)
| 9 | * 使用 net.createServer() 试探性绑定,无副作用(成功后立即释放)。 |
| 10 | */ |
| 11 | export function isPortAvailable(port: number, host: string): Promise<boolean> { |
| 12 | return new Promise((resolve, reject) => { |
| 13 | const server = net.createServer() |
| 14 | server.once('error', (err: NodeJS.ErrnoException) => { |
| 15 | if (err.code === 'EADDRINUSE') { |
| 16 | resolve(false) |
| 17 | } else { |
| 18 | reject(err) |
| 19 | } |
| 20 | }) |
| 21 | server.once('listening', () => server.close(() => resolve(true))) |
| 22 | server.listen(port, host) |
| 23 | }) |
| 24 | } |
| 25 | |
| 26 | /** |
| 27 | * 返回端口被占用时统一的友好报错文案。 |