diff --git a/.changeset/blue-buttons-sit.md b/.changeset/blue-buttons-sit.md new file mode 100644 index 0000000000..4839d0dd45 --- /dev/null +++ b/.changeset/blue-buttons-sit.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Adding `--inspect-brk` as an option when debugging backend for development diff --git a/packages/cli/src/commands/backend/dev.ts b/packages/cli/src/commands/backend/dev.ts index a09cea0e8a..b14a1f3e20 100644 --- a/packages/cli/src/commands/backend/dev.ts +++ b/packages/cli/src/commands/backend/dev.ts @@ -29,6 +29,7 @@ export default async (cmd: Command) => { entry: 'src/index', checksEnabled: cmd.check, inspectEnabled: cmd.inspect, + inspectBrkEnabled: cmd.inspectBrk, }); await waitForExit(); diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index bcd1509f58..117778b35e 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -69,6 +69,7 @@ export function registerCommands(program: CommanderStatic) { .description('Start local development server with HMR for the backend') .option('--check', 'Enable type checking and linting') .option('--inspect', 'Enable debugger') + .option('--inspect-brk', 'Enable debugger with await to attach debugger') // We don't actually use the config in the CLI, just pass them on to the NodeJS process .option(...configOption) .action(lazy(() => import('./backend/dev').then(m => m.default))); diff --git a/packages/cli/src/lib/bundler/config.ts b/packages/cli/src/lib/bundler/config.ts index 6e3f445f4a..58ff71b7f6 100644 --- a/packages/cli/src/lib/bundler/config.ts +++ b/packages/cli/src/lib/bundler/config.ts @@ -247,6 +247,13 @@ export async function createBackendConfig( const { loaders } = transforms(options); + const runScriptNodeArgs = new Array(); + if (options.inspectEnabled) { + runScriptNodeArgs.push('--inspect'); + } else if (options.inspectBrkEnabled) { + runScriptNodeArgs.push('--inspect-brk'); + } + return { mode: isDev ? 'development' : 'production', profile: false, @@ -319,7 +326,7 @@ export async function createBackendConfig( plugins: [ new RunScriptWebpackPlugin({ name: 'main.js', - nodeArgs: options.inspectEnabled ? ['--inspect'] : undefined, + nodeArgs: runScriptNodeArgs.length > 0 ? runScriptNodeArgs : undefined, args: process.argv.slice(3), // drop `node backstage-cli backend:dev` }), new webpack.HotModuleReplacementPlugin(), diff --git a/packages/cli/src/lib/bundler/types.ts b/packages/cli/src/lib/bundler/types.ts index 283074a295..93865bcf7e 100644 --- a/packages/cli/src/lib/bundler/types.ts +++ b/packages/cli/src/lib/bundler/types.ts @@ -47,11 +47,13 @@ export type BackendBundlingOptions = { isDev: boolean; parallel?: ParallelOption; inspectEnabled: boolean; + inspectBrkEnabled: boolean; }; export type BackendServeOptions = BundlingPathsOptions & { checksEnabled: boolean; inspectEnabled: boolean; + inspectBrkEnabled: boolean; }; export type LernaPackage = {