init: 初始化 AssetX 项目仓库
包含 webapp(Next.js 用户端)、webapp-back(Go 后端)、 antdesign(管理后台)、landingpage(营销落地页)、 数据库 SQL 和配置文件。
This commit is contained in:
84
webapp/scripts/start-with-port.js
Normal file
84
webapp/scripts/start-with-port.js
Normal file
@@ -0,0 +1,84 @@
|
||||
const { spawn } = require('child_process');
|
||||
const net = require('net');
|
||||
|
||||
const DEFAULT_PORT = 3000;
|
||||
const MAX_PORT = 3020;
|
||||
|
||||
function checkPort(port) {
|
||||
return new Promise((resolve) => {
|
||||
const server = net.createServer();
|
||||
|
||||
server.once('error', (err) => {
|
||||
if (err.code === 'EADDRINUSE') {
|
||||
resolve(false);
|
||||
} else {
|
||||
resolve(false);
|
||||
}
|
||||
});
|
||||
|
||||
server.once('listening', () => {
|
||||
server.close();
|
||||
resolve(true);
|
||||
});
|
||||
|
||||
server.listen(port, '0.0.0.0');
|
||||
});
|
||||
}
|
||||
|
||||
async function findAvailablePort(startPort = DEFAULT_PORT) {
|
||||
for (let port = startPort; port <= MAX_PORT; port++) {
|
||||
const isAvailable = await checkPort(port);
|
||||
if (isAvailable) {
|
||||
return port;
|
||||
}
|
||||
}
|
||||
throw new Error(`No available port found between ${startPort} and ${MAX_PORT}`);
|
||||
}
|
||||
|
||||
async function startServer() {
|
||||
try {
|
||||
const port = await findAvailablePort(DEFAULT_PORT);
|
||||
|
||||
if (port !== DEFAULT_PORT) {
|
||||
console.log(`Port ${DEFAULT_PORT} is in use, using port ${port} instead`);
|
||||
} else {
|
||||
console.log(`Starting server on port ${port}`);
|
||||
}
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
const command = args[0] || 'next';
|
||||
const commandArgs = args.slice(1);
|
||||
|
||||
const child = spawn(command, [...commandArgs, '-p', String(port), '-H', '0.0.0.0'], {
|
||||
stdio: 'inherit',
|
||||
shell: true,
|
||||
env: {
|
||||
...process.env,
|
||||
PORT: String(port)
|
||||
}
|
||||
});
|
||||
|
||||
child.on('error', (error) => {
|
||||
console.error('Failed to start server:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
child.on('exit', (code) => {
|
||||
process.exit(code || 0);
|
||||
});
|
||||
|
||||
process.on('SIGINT', () => {
|
||||
child.kill('SIGINT');
|
||||
});
|
||||
|
||||
process.on('SIGTERM', () => {
|
||||
child.kill('SIGTERM');
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
startServer();
|
||||
Reference in New Issue
Block a user