diff --git a/lib/cli/src/helpers.ts b/lib/cli/src/helpers.ts index 63eca144909..2893ecd8d6b 100644 --- a/lib/cli/src/helpers.ts +++ b/lib/cli/src/helpers.ts @@ -182,27 +182,6 @@ export function codeLog(codeLines: string[], leftPadAmount?: number) { logger.log(finalResult); } -export function installDepsFromPackageJson(options: NpmOptions) { - let done = commandLog('Preparing to install dependencies'); - done(); - logger.log(); - - let result; - if (options.useYarn) { - result = spawnSync('yarn', { stdio: 'inherit' }); - } else { - result = spawnSync('npm', ['install'], { stdio: 'inherit' }); - } - - logger.log(); - done = commandLog('Installing dependencies'); - if (result.status !== 0) { - done('An error occurred while installing dependencies.'); - process.exit(1); - } - done(); -} - /** * Add dependencies to a project using `yarn add` or `npm install`. * diff --git a/lib/cli/src/initiate.ts b/lib/cli/src/initiate.ts index 61d2daf5eec..e63cdc60c3c 100644 --- a/lib/cli/src/initiate.ts +++ b/lib/cli/src/initiate.ts @@ -9,13 +9,7 @@ import { StoryFormat, SupportedLanguage, } from './project_types'; -import { - commandLog, - codeLog, - paddedLog, - installDepsFromPackageJson, - getPackageJson, -} from './helpers'; +import { commandLog, codeLog, paddedLog, getPackageJson } from './helpers'; import angularGenerator from './generators/ANGULAR'; import emberGenerator from './generators/EMBER'; import meteorGenerator from './generators/METEOR'; @@ -37,6 +31,7 @@ import svelteGenerator from './generators/SVELTE'; import raxGenerator from './generators/RAX'; import { warn } from './warn'; import { JsPackageManagerFactory } from './js-package-manager/JsPackageManagerFactory'; +import { NpmOptions } from './NpmOptions'; const logger = console; @@ -54,7 +49,7 @@ type CommandOptions = { const installStorybook = (projectType: ProjectType, options: CommandOptions): Promise => { const packageManager = JsPackageManagerFactory.getPackageManager(options.useNpm); - const npmOptions = { + const npmOptions: NpmOptions = { useYarn: Boolean(options.useNpm !== true) && hasYarn(), installAsDevDependencies: true, skipInstall: options.skipInstall, @@ -72,7 +67,7 @@ const installStorybook = (projectType: ProjectType, options: CommandOptions): Pr const end = () => { if (!options.skipInstall) { - installDepsFromPackageJson(npmOptions); + packageManager.installDependencies(); } logger.log('\nTo run your storybook, type:\n'); diff --git a/lib/cli/src/js-package-manager/JsPackageManager.ts b/lib/cli/src/js-package-manager/JsPackageManager.ts index bcf1cbcd882..446025897e1 100644 --- a/lib/cli/src/js-package-manager/JsPackageManager.ts +++ b/lib/cli/src/js-package-manager/JsPackageManager.ts @@ -1,5 +1,27 @@ +import { commandLog } from '../helpers'; + +const logger = console; + export abstract class JsPackageManager { public abstract initPackageJson(): void; public abstract getRunStorybookCommand(): string; + + public installDependencies(): void { + let done = commandLog('Preparing to install dependencies'); + done(); + logger.log(); + + const result = this.runInstall(); + + logger.log(); + done = commandLog('Installing dependencies'); + if (result.status !== 0) { + done('An error occurred while installing dependencies.'); + process.exit(1); + } + done(); + } + + protected abstract runInstall(): { status: number }; } diff --git a/lib/cli/src/js-package-manager/NPMProxy.ts b/lib/cli/src/js-package-manager/NPMProxy.ts index 6145675570f..b3d4b46d7ad 100644 --- a/lib/cli/src/js-package-manager/NPMProxy.ts +++ b/lib/cli/src/js-package-manager/NPMProxy.ts @@ -1,9 +1,9 @@ -import spawn from 'cross-spawn'; +import { sync as spawnSync } from 'cross-spawn'; import { JsPackageManager } from './JsPackageManager'; export class NPMProxy extends JsPackageManager { initPackageJson() { - const results = spawn.sync('npm', ['init', '-y'], { + const results = spawnSync('npm', ['init', '-y'], { cwd: process.cwd(), env: process.env, stdio: 'pipe', @@ -15,4 +15,8 @@ export class NPMProxy extends JsPackageManager { getRunStorybookCommand(): string { return 'npm run storybook'; } + + protected runInstall(): { status: number } { + return spawnSync('npm', ['install'], { stdio: 'inherit' }); + } } diff --git a/lib/cli/src/js-package-manager/Yarn1Proxy.ts b/lib/cli/src/js-package-manager/Yarn1Proxy.ts index c90b77fa5a4..c1d8fdf9353 100644 --- a/lib/cli/src/js-package-manager/Yarn1Proxy.ts +++ b/lib/cli/src/js-package-manager/Yarn1Proxy.ts @@ -1,9 +1,9 @@ -import spawn from 'cross-spawn'; +import { sync as spawnSync } from 'cross-spawn'; import { JsPackageManager } from './JsPackageManager'; export class Yarn1Proxy extends JsPackageManager { initPackageJson() { - const results = spawn.sync('yarn', ['init', '-y'], { + const results = spawnSync('yarn', ['init', '-y'], { cwd: process.cwd(), env: process.env, stdio: 'pipe', @@ -15,4 +15,8 @@ export class Yarn1Proxy extends JsPackageManager { getRunStorybookCommand(): string { return 'yarn storybook'; } + + protected runInstall(): { status: number } { + return spawnSync('yarn', { stdio: 'inherit' }); + } } diff --git a/lib/cli/src/js-package-manager/Yarn2Proxy.ts b/lib/cli/src/js-package-manager/Yarn2Proxy.ts index 6965239f62a..e29d2a17ad3 100644 --- a/lib/cli/src/js-package-manager/Yarn2Proxy.ts +++ b/lib/cli/src/js-package-manager/Yarn2Proxy.ts @@ -1,9 +1,9 @@ -import spawn from 'cross-spawn'; +import { sync as spawnSync } from 'cross-spawn'; import { JsPackageManager } from './JsPackageManager'; export class Yarn2Proxy extends JsPackageManager { initPackageJson() { - const results = spawn.sync('yarn', ['init'], { + const results = spawnSync('yarn', ['init'], { cwd: process.cwd(), env: process.env, stdio: 'pipe', @@ -15,4 +15,8 @@ export class Yarn2Proxy extends JsPackageManager { getRunStorybookCommand(): string { return 'yarn storybook'; } + + protected runInstall(): { status: number } { + return spawnSync('yarn', { stdio: 'inherit' }); + } }