完善端口占用检测

This commit is contained in:
xiaopeng 2025-01-26 16:29:00 +08:00
parent 1463b4f234
commit 2ca58b4f88
3 changed files with 24 additions and 163 deletions

View File

@ -1,33 +1,25 @@
const net = require('net');
import { execSync } from 'child_process';
/**
*
*
* @param {number} port -
* @returns {boolean} -
*/
function isPortAvailableSync(port) {
let available = false;
let checked = false; // 新增标志变量,表示检查是否完成
const server = net.createServer();
server.once('error', err => {
if (err.code === 'EADDRINUSE') {
checked = true; // 标记检查完成
server.close();
function isPortAvailableSync(port: number): boolean {
try {
if (process.platform === 'win32') {
// Windows 使用 netstat 检查端口
execSync(`netstat -ano | findstr :${port}`, { stdio: 'ignore' });
} else {
// Linux/Mac 使用 lsof 检查端口
execSync(`lsof -i :${port}`, { stdio: 'ignore' });
}
});
server.once('listening', () => {
available = true; // 标记端口可用
checked = true; // 标记检查完成
server.close();
});
server.listen(port);
// 阻塞直到检查完成checked === true
// deasync.loopWhile(() => !checked);
return available;
// 命令执行成功,端口被占用
return false;
} catch (error) {
// 命令执行失败,端口可用
return true;
}
}
/**
@ -35,11 +27,16 @@ function isPortAvailableSync(port) {
* @param {number} startPort -
* @returns {number} -
*/
export function checkPort(startPort: number) {
export function checkPort(startPort: number): number {
let port = startPort;
while (port <= 65535) {
if (isPortAvailableSync(port)) {
console.log(`Valid port: ${port}`);
if (port !== startPort) {
console.warn(
'\x1b[33m%s\x1b[0m',
`Port ${startPort} is occupied, using port ${port}`
);
}
return port;
}
port++;

View File

@ -12,7 +12,7 @@ export default {
// 确保每个项目唯一,项目首次启动会自动生成
keys: '576848ea-bb0c-4c0c-ac95-c8602ef908b5',
koa: {
port: 8001,
port: checkPort(8001),
},
// 开启异步上下文管理
asyncContextManager: {

View File

@ -1,136 +0,0 @@
/** This file generated by @midwayjs/bundle-helper */
export { MainConfiguration as Configuration } from './configuration';
export * from './comm/path';
export * from './comm/port';
export * from './comm/utils';
export * from './config/config.default';
export * from './modules/base/entity/base';
export * from './modules/user/entity/wx';
export * from './modules/user/entity/info';
export * from './modules/user/entity/address';
export * from './modules/task/entity/log';
export * from './modules/task/entity/info';
export * from './modules/space/entity/type';
export * from './modules/space/entity/info';
export * from './modules/recycle/entity/data';
export * from './modules/plugin/entity/info';
export * from './modules/dict/entity/type';
export * from './modules/dict/entity/info';
export * from './modules/demo/entity/goods';
export * from './modules/base/entity/sys/user_role';
export * from './modules/base/entity/sys/user';
export * from './modules/base/entity/sys/role_menu';
export * from './modules/base/entity/sys/role_department';
export * from './modules/base/entity/sys/role';
export * from './modules/base/entity/sys/param';
export * from './modules/base/entity/sys/menu';
export * from './modules/base/entity/sys/log';
export * from './modules/base/entity/sys/department';
export * from './modules/base/entity/sys/conf';
export * from './entities';
export * from './modules/base/db/tenant';
export * from './config/config.local';
export * from './config/config.prod';
export * from './interface';
export * from './modules/base/service/sys/conf';
export * from './modules/base/service/sys/log';
export * from './modules/base/middleware/log';
export * from './modules/base/middleware/authority';
export * from './modules/base/service/translate';
export * from './modules/base/middleware/translate';
export * from './modules/base/config';
export * from './modules/plugin/interface';
export * from './modules/plugin/service/center';
export * from './modules/plugin/event/init';
export * from './modules/plugin/service/types';
export * from './modules/plugin/service/info';
export * from './modules/base/dto/login';
export * from './modules/base/service/sys/data';
export * from './modules/base/service/sys/menu';
export * from './modules/base/service/sys/department';
export * from './modules/base/service/sys/perms';
export * from './modules/base/service/sys/role';
export * from './modules/base/service/sys/login';
export * from './modules/base/service/sys/user';
export * from './modules/base/controller/admin/comm';
export * from './modules/base/service/sys/param';
export * from './modules/base/controller/admin/open';
export * from './modules/base/controller/admin/sys/department';
export * from './modules/base/controller/admin/sys/log';
export * from './modules/base/controller/admin/sys/menu';
export * from './modules/base/controller/admin/sys/param';
export * from './modules/base/controller/admin/sys/role';
export * from './modules/base/controller/admin/sys/user';
export * from './modules/base/controller/app/comm';
export * from './modules/base/event/app';
export * from './modules/base/event/menu';
export * from './modules/base/job/log';
export * from './modules/demo/config';
export * from './modules/demo/service/goods';
export * from './modules/demo/controller/admin/goods';
export * from './modules/demo/service/tenant';
export * from './modules/demo/controller/admin/tenant';
export * from './modules/demo/service/cache';
export * from './modules/demo/controller/open/cache';
export * from './modules/demo/controller/open/event';
export * from './modules/demo/controller/open/goods';
export * from './modules/demo/controller/open/plugin';
export * from './modules/demo/queue/comm';
export * from './modules/demo/queue/getter';
export * from './modules/demo/controller/open/queue';
export * from './modules/demo/service/rpc';
export * from './modules/demo/controller/open/rpc';
export * from './modules/demo/controller/open/sse';
export * from './modules/demo/controller/open/tenant';
export * from './modules/demo/service/transaction';
export * from './modules/demo/controller/open/transaction';
export * from './modules/demo/event/comm';
export * from './modules/demo/queue/single';
export * from './modules/dict/config';
export * from './modules/dict/service/info';
export * from './modules/dict/controller/admin/info';
export * from './modules/dict/service/type';
export * from './modules/dict/controller/admin/type';
export * from './modules/dict/controller/app/info';
export * from './modules/plugin/config';
export * from './modules/plugin/controller/admin/info';
export * from './modules/plugin/event/app';
export * from './modules/plugin/hooks/base';
export * from './modules/plugin/hooks/upload/interface';
export * from './modules/plugin/hooks/upload/index';
export * from './modules/recycle/config';
export * from './modules/recycle/service/data';
export * from './modules/recycle/controller/admin/data';
export * from './modules/recycle/event/data';
export * from './modules/recycle/schedule/data';
export * from './modules/space/config';
export * from './modules/space/service/info';
export * from './modules/space/controller/admin/info';
export * from './modules/space/service/type';
export * from './modules/space/controller/admin/type';
export * from './modules/swagger/builder';
export * from './modules/swagger/config';
export * from './modules/swagger/controller/index';
export * from './modules/swagger/event/app';
export * from './modules/task/service/bull';
export * from './modules/task/queue/task';
export * from './modules/task/service/local';
export * from './modules/task/service/info';
export * from './modules/task/middleware/task';
export * from './modules/task/config';
export * from './modules/task/controller/admin/info';
export * from './modules/task/event/app';
export * from './modules/task/service/demo';
export * from './modules/user/middleware/app';
export * from './modules/user/config';
export * from './modules/user/service/address';
export * from './modules/user/controller/admin/address';
export * from './modules/user/controller/admin/info';
export * from './modules/user/controller/app/address';
export * from './modules/user/service/wx';
export * from './modules/user/controller/app/comm';
export * from './modules/user/service/sms';
export * from './modules/user/service/info';
export * from './modules/user/controller/app/info';
export * from './modules/user/service/login';
export * from './modules/user/controller/app/login';