Skip to content

Commit 1d6cb66

Browse files
UberMouseclaude
andauthored
add --port flag to heft-storybook-plugin to set the storybook dev server port in serve mode (#5819)
Co-authored-by: Taylor Lodge <ubermouse@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 2ee05e6 commit 1d6cb66

3 files changed

Lines changed: 27 additions & 1 deletion

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@rushstack/heft-storybook-plugin",
5+
"comment": "Add `--port` flag to pass a specific dev server port through to the Storybook CLI in serve mode",
6+
"type": "minor"
7+
}
8+
],
9+
"packageName": "@rushstack/heft-storybook-plugin"
10+
}

heft-plugins/heft-storybook-plugin/heft-plugin.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@
2828
"longName": "--no-open",
2929
"description": "Pass --no-open to the storybook CLI so it does not automatically open a browser window in serve mode.",
3030
"parameterKind": "flag"
31+
},
32+
{
33+
"longName": "--port",
34+
"description": "Pass --port to the storybook CLI to bind the dev server to a specific port in serve mode.",
35+
"parameterKind": "string",
36+
"argumentName": "PORT"
3137
}
3238
]
3339
}

heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import type {
2323
IScopedLogger,
2424
IHeftTaskPlugin,
2525
CommandLineFlagParameter,
26+
CommandLineStringParameter,
2627
IHeftTaskRunHookOptions
2728
} from '@rushstack/heft';
2829
import type {
@@ -191,6 +192,7 @@ interface IPrepareStorybookOptions extends IStorybookPluginOptions {
191192
isTestMode: boolean;
192193
isDocsMode: boolean;
193194
isNoOpenMode: boolean;
195+
port: string | undefined;
194196
}
195197

196198
const DEFAULT_STORYBOOK_VERSION: StorybookCliVersion = StorybookCliVersion.STORYBOOK7;
@@ -229,6 +231,7 @@ const STORYBOOK_FLAG_NAME: '--storybook' = '--storybook';
229231
const STORYBOOK_TEST_FLAG_NAME: '--storybook-test' = '--storybook-test';
230232
const DOCS_FLAG_NAME: '--docs' = '--docs';
231233
const NO_OPEN_FLAG_NAME: '--no-open' = '--no-open';
234+
const PORT_FLAG_NAME: '--port' = '--port';
232235

233236
/** @public */
234237
export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPluginOptions> {
@@ -248,6 +251,8 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
248251
const docsParameter: CommandLineFlagParameter = taskSession.parameters.getFlagParameter(DOCS_FLAG_NAME);
249252
const noOpenParameter: CommandLineFlagParameter =
250253
taskSession.parameters.getFlagParameter(NO_OPEN_FLAG_NAME);
254+
const portParameter: CommandLineStringParameter =
255+
taskSession.parameters.getStringParameter(PORT_FLAG_NAME);
251256

252257
const parseResult: IParsedPackageNameOrError = PackageName.tryParse(options.storykitPackageName);
253258
if (parseResult.error) {
@@ -312,6 +317,7 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
312317
isTestMode: storybookTestParameter.value,
313318
isDocsMode: docsParameter.value,
314319
isNoOpenMode: noOpenParameter.value,
320+
port: portParameter.value,
315321
...options
316322
});
317323
await this._runStorybookAsync(runStorybookOptions, options);
@@ -470,7 +476,7 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
470476
runStorybookOptions: IRunStorybookOptions,
471477
options: IStorybookPluginOptions
472478
): Promise<void> {
473-
const { logger, resolvedModulePath, verbose, isServeMode, isTestMode, isDocsMode, isNoOpenMode } =
479+
const { logger, resolvedModulePath, verbose, isServeMode, isTestMode, isDocsMode, isNoOpenMode, port } =
474480
runStorybookOptions;
475481
let { workingDirectory, outputFolder } = runStorybookOptions;
476482
logger.terminal.writeLine('Running Storybook compilation');
@@ -522,6 +528,10 @@ export default class StorybookPlugin implements IHeftTaskPlugin<IStorybookPlugin
522528
storybookArgs.push('--no-open');
523529
}
524530

531+
if (isServeMode && port) {
532+
storybookArgs.push('--port', port);
533+
}
534+
525535
const storybookEnv: NodeJS.ProcessEnv = {
526536
...process.env,
527537
// Prevent corepack from prompting to pin a package manager version

0 commit comments

Comments
 (0)