diff --git a/src/comm/port.ts b/src/comm/port.ts index 112dc30..c14db58 100644 --- a/src/comm/port.ts +++ b/src/comm/port.ts @@ -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++; diff --git a/src/config/config.default.ts b/src/config/config.default.ts index 670cd38..fde7149 100644 --- a/src/config/config.default.ts +++ b/src/config/config.default.ts @@ -12,7 +12,7 @@ export default { // 确保每个项目唯一,项目首次启动会自动生成 keys: '576848ea-bb0c-4c0c-ac95-c8602ef908b5', koa: { - port: 8001, + port: checkPort(8001), }, // 开启异步上下文管理 asyncContextManager: { diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 9ad7e4c..0000000 --- a/src/index.ts +++ /dev/null @@ -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';