From 9d7679907286264c31ea72e47d954d1570106aa8 Mon Sep 17 00:00:00 2001 From: alex8088 <244096523@qq.com> Date: Thu, 27 Jul 2023 00:33:28 +0800 Subject: [PATCH] feat(cli): add CLI --inspect[-brk] to support debugging without IDEs (#231) --- src/cli.ts | 19 ++++++++++++++++++- src/electron.ts | 13 ++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index 6b39d3d..1a69c29 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -26,6 +26,13 @@ interface GlobalCLIOptions { outDir?: string } +interface DevCLIOptions { + inspect?: boolean | string + inspectBrk?: boolean | string + remoteDebuggingPort?: string + rendererOnly?: boolean +} + function createInlineConfig(root: string, options: GlobalCLIOptions): InlineConfig { return { root, @@ -59,13 +66,23 @@ cli .alias('serve') .alias('dev') .option('-w, --watch', `[boolean] rebuilds when main process or preload script modules have changed on disk`) + .option('--inspect [port]', `[boolean | number] enable V8 inspector on the specified port`) + .option('--inspectBrk [port]', `[boolean | number] enable V8 inspector on the specified port`) .option('--remoteDebuggingPort ', `[string] port for remote debugging`) .option('--rendererOnly', `[boolean] only dev server for the renderer`) - .action(async (root: string, options: { remoteDebuggingPort?: string; rendererOnly: boolean } & GlobalCLIOptions) => { + .action(async (root: string, options: DevCLIOptions & GlobalCLIOptions) => { if (options.remoteDebuggingPort) { process.env.REMOTE_DEBUGGING_PORT = options.remoteDebuggingPort } + if (options.inspect) { + process.env.V8_INSPECTOR_PORT = typeof options.inspect === 'number' ? `${options.inspect}` : '5858' + } + + if (options.inspectBrk) { + process.env.V8_INSPECTOR_BRK_PORT = typeof options.inspectBrk === 'number' ? `${options.inspectBrk}` : '5858' + } + const { createServer } = await import('./server') const inlineConfig = createInlineConfig(root, options) diff --git a/src/electron.ts b/src/electron.ts index 0fb9a6f..68b716a 100644 --- a/src/electron.ts +++ b/src/electron.ts @@ -118,11 +118,22 @@ export function startElectron(root: string | undefined, logger: Logger): ChildPr const inspect = !!process.env.VSCODE_INSPECTOR_OPTIONS + const isDev = process.env.NODE_ENV_ELECTRON_VITE === 'development' + const args: string[] = [] - if (!!process.env.REMOTE_DEBUGGING_PORT && process.env.NODE_ENV_ELECTRON_VITE === 'development') { + + if (!!process.env.REMOTE_DEBUGGING_PORT && isDev) { args.push(`--remote-debugging-port=${process.env.REMOTE_DEBUGGING_PORT}`) } + if (!!process.env.V8_INSPECTOR_PORT && isDev) { + args.push(`--inspect=${process.env.V8_INSPECTOR_PORT}`) + } + + if (!!process.env.V8_INSPECTOR_BRK_PORT && isDev) { + args.push(`--inspect-brk=${process.env.V8_INSPECTOR_BRK_PORT}`) + } + const ps = spawn(electronPath, ['.'].concat(args)) ps.stdout.on('data', chunk => { !inspect && chunk.toString().trim() && logger.info(chunk.toString())