chore: sync backend and deployment changes
This commit is contained in:
@@ -25,6 +25,53 @@ const mimeTypes = {
|
||||
'.woff2': 'font/woff2',
|
||||
};
|
||||
|
||||
function canListenOnPort(candidatePort, host = '0.0.0.0') {
|
||||
return new Promise((resolve, reject) => {
|
||||
const probeServer = createServer();
|
||||
|
||||
probeServer.once('error', (error) => {
|
||||
probeServer.close(() => {
|
||||
if (error && typeof error === 'object' && 'code' in error && error.code === 'EADDRINUSE') {
|
||||
resolve(false);
|
||||
return;
|
||||
}
|
||||
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
|
||||
probeServer.once('listening', () => {
|
||||
probeServer.close((closeError) => {
|
||||
if (closeError) {
|
||||
reject(closeError);
|
||||
return;
|
||||
}
|
||||
|
||||
resolve(true);
|
||||
});
|
||||
});
|
||||
|
||||
probeServer.listen(candidatePort, host);
|
||||
});
|
||||
}
|
||||
|
||||
async function findAvailablePort(initialPort, host = '0.0.0.0', maxAttempts = 20) {
|
||||
for (let offset = 0; offset < maxAttempts; offset += 1) {
|
||||
const candidatePort = initialPort + offset;
|
||||
const available = await canListenOnPort(candidatePort, host);
|
||||
|
||||
if (available) {
|
||||
return candidatePort;
|
||||
}
|
||||
|
||||
if (offset === 0) {
|
||||
console.warn(`Port ${initialPort} is in use, trying another one...`);
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(`No available port found from ${initialPort} to ${initialPort + maxAttempts - 1}.`);
|
||||
}
|
||||
|
||||
function resolveCacheControl(resolvedPath, extension) {
|
||||
const normalizedPath = resolvedPath.replace(/\\/g, '/');
|
||||
|
||||
@@ -218,6 +265,9 @@ server.on('upgrade', (request, socket, head) => {
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(port, '0.0.0.0', () => {
|
||||
console.log(`${distDirName} server listening on http://0.0.0.0:${port}`);
|
||||
const host = '0.0.0.0';
|
||||
const resolvedPort = await findAvailablePort(port, host);
|
||||
|
||||
server.listen(resolvedPort, host, () => {
|
||||
console.log(`${distDirName} server listening on http://${host}:${resolvedPort}`);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user