57 lines
1.3 KiB
JavaScript
57 lines
1.3 KiB
JavaScript
// Скрипт для поиска свободного порта для Next.js
|
||
|
||
const net = require('net');
|
||
|
||
/**
|
||
* Проверяет, свободен ли порт
|
||
*/
|
||
function isPortAvailable(port) {
|
||
return new Promise((resolve) => {
|
||
const server = net.createServer();
|
||
|
||
server.listen(port, () => {
|
||
server.once('close', () => {
|
||
resolve(true);
|
||
});
|
||
server.close();
|
||
});
|
||
|
||
server.on('error', () => {
|
||
resolve(false);
|
||
});
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Находит свободный порт начиная с заданного
|
||
*/
|
||
async function findFreePort(startPort, maxAttempts = 10) {
|
||
for (let i = 0; i < maxAttempts; i++) {
|
||
const port = startPort + i;
|
||
const available = await isPortAvailable(port);
|
||
if (available) {
|
||
return port;
|
||
}
|
||
}
|
||
throw new Error(
|
||
`Не удалось найти свободный порт в диапазоне ${startPort}-${startPort + maxAttempts - 1}`
|
||
);
|
||
}
|
||
|
||
// Если запущен как скрипт
|
||
if (require.main === module) {
|
||
const startPort = parseInt(process.argv[2]) || 3000;
|
||
findFreePort(startPort)
|
||
.then((port) => {
|
||
console.log(port);
|
||
process.exit(0);
|
||
})
|
||
.catch((error) => {
|
||
console.error(error.message);
|
||
process.exit(1);
|
||
});
|
||
}
|
||
|
||
module.exports = { isPortAvailable, findFreePort };
|
||
|