@@ -23,6 +23,7 @@ import type {
2323 IScopedLogger ,
2424 IHeftTaskPlugin ,
2525 CommandLineFlagParameter ,
26+ CommandLineStringParameter ,
2627 IHeftTaskRunHookOptions
2728} from '@rushstack/heft' ;
2829import type {
@@ -191,6 +192,7 @@ interface IPrepareStorybookOptions extends IStorybookPluginOptions {
191192 isTestMode : boolean ;
192193 isDocsMode : boolean ;
193194 isNoOpenMode : boolean ;
195+ port : string | undefined ;
194196}
195197
196198const DEFAULT_STORYBOOK_VERSION : StorybookCliVersion = StorybookCliVersion . STORYBOOK7 ;
@@ -229,6 +231,7 @@ const STORYBOOK_FLAG_NAME: '--storybook' = '--storybook';
229231const STORYBOOK_TEST_FLAG_NAME : '--storybook-test' = '--storybook-test' ;
230232const DOCS_FLAG_NAME : '--docs' = '--docs' ;
231233const NO_OPEN_FLAG_NAME : '--no-open' = '--no-open' ;
234+ const PORT_FLAG_NAME : '--port' = '--port' ;
232235
233236/** @public */
234237export 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