diff --git a/common/changes/@rushstack/heft-storybook-plugin/heft-storybook-plugin-port-flag_2026-06-05-15-54.json b/common/changes/@rushstack/heft-storybook-plugin/heft-storybook-plugin-port-flag_2026-06-05-15-54.json new file mode 100644 index 0000000000..27867753b8 --- /dev/null +++ b/common/changes/@rushstack/heft-storybook-plugin/heft-storybook-plugin-port-flag_2026-06-05-15-54.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-storybook-plugin", + "comment": "Add `--port` flag to pass a specific dev server port through to the Storybook CLI in serve mode", + "type": "minor" + } + ], + "packageName": "@rushstack/heft-storybook-plugin" +} diff --git a/heft-plugins/heft-storybook-plugin/heft-plugin.json b/heft-plugins/heft-storybook-plugin/heft-plugin.json index 11627a4fa4..8c0b0185d2 100644 --- a/heft-plugins/heft-storybook-plugin/heft-plugin.json +++ b/heft-plugins/heft-storybook-plugin/heft-plugin.json @@ -28,6 +28,12 @@ "longName": "--no-open", "description": "Pass --no-open to the storybook CLI so it does not automatically open a browser window in serve mode.", "parameterKind": "flag" + }, + { + "longName": "--port", + "description": "Pass --port to the storybook CLI to bind the dev server to a specific port in serve mode.", + "parameterKind": "string", + "argumentName": "PORT" } ] } diff --git a/heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts b/heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts index 89dfd3779f..56d6476992 100644 --- a/heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts +++ b/heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts @@ -23,6 +23,7 @@ import type { IScopedLogger, IHeftTaskPlugin, CommandLineFlagParameter, + CommandLineStringParameter, IHeftTaskRunHookOptions } from '@rushstack/heft'; import type { @@ -191,6 +192,7 @@ interface IPrepareStorybookOptions extends IStorybookPluginOptions { isTestMode: boolean; isDocsMode: boolean; isNoOpenMode: boolean; + port: string | undefined; } const DEFAULT_STORYBOOK_VERSION: StorybookCliVersion = StorybookCliVersion.STORYBOOK7; @@ -229,6 +231,7 @@ const STORYBOOK_FLAG_NAME: '--storybook' = '--storybook'; const STORYBOOK_TEST_FLAG_NAME: '--storybook-test' = '--storybook-test'; const DOCS_FLAG_NAME: '--docs' = '--docs'; const NO_OPEN_FLAG_NAME: '--no-open' = '--no-open'; +const PORT_FLAG_NAME: '--port' = '--port'; /** @public */ export default class StorybookPlugin implements IHeftTaskPlugin { @@ -248,6 +251,8 @@ export default class StorybookPlugin implements IHeftTaskPlugin { - const { logger, resolvedModulePath, verbose, isServeMode, isTestMode, isDocsMode, isNoOpenMode } = + const { logger, resolvedModulePath, verbose, isServeMode, isTestMode, isDocsMode, isNoOpenMode, port } = runStorybookOptions; let { workingDirectory, outputFolder } = runStorybookOptions; logger.terminal.writeLine('Running Storybook compilation'); @@ -522,6 +528,10 @@ export default class StorybookPlugin implements IHeftTaskPlugin