From 590959284e1d6112e31e964eaf4c31f8517f649c Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Thu, 31 Mar 2022 19:11:30 +0800 Subject: [PATCH] Merge pull request #17830 from storybookjs/feat/cli-add-vite-builder CLI: Fix vite/jest issue with mocked global --- lib/cli/src/generators/baseGenerator.ts | 19 ++++++++++++++++++- lib/cli/src/project_types.ts | 1 + .../src/utils/get-manager-builder.ts | 7 +++---- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/lib/cli/src/generators/baseGenerator.ts b/lib/cli/src/generators/baseGenerator.ts index 926af379e361..63ced930679d 100644 --- a/lib/cli/src/generators/baseGenerator.ts +++ b/lib/cli/src/generators/baseGenerator.ts @@ -1,4 +1,5 @@ import fse from 'fs-extra'; +import dedent from 'ts-dedent'; import { getStorybookBabelDependencies } from '@storybook/core-common'; import { NpmOptions } from '../NpmOptions'; import { SupportedLanguage, SupportedFrameworks, Builder, CoreBuilder } from '../project_types'; @@ -51,6 +52,8 @@ const builderDependencies = (builder: Builder) => { return []; case CoreBuilder.Webpack5: return ['@storybook/builder-webpack5', '@storybook/manager-webpack5']; + case CoreBuilder.Vite: + return ['@storybook/builder-vite']; default: return [builder]; } @@ -121,11 +124,15 @@ export async function baseGenerator( const versionedPackages = await packageManager.getVersionedPackages(...packages); + const coreBuilders = [CoreBuilder.Webpack4, CoreBuilder.Webpack5, CoreBuilder.Vite] as string[]; + const expandedBuilder = coreBuilders.includes(builder) + ? `@storybook/builder-${builder}` + : builder; const mainOptions = builder !== CoreBuilder.Webpack4 ? { core: { - builder, + builder: expandedBuilder, }, ...extraMain, } @@ -141,6 +148,16 @@ export async function baseGenerator( copyComponents(framework, language); } + // FIXME: temporary workaround for https://github.com/storybookjs/storybook/issues/17516 + if (expandedBuilder === '@storybook/builder-vite') { + const previewHead = dedent` + + `; + await fse.writeFile(`.storybook/preview-head.html`, previewHead, { encoding: 'utf8' }); + } + const babelDependencies = addBabel ? await getBabelDependencies(packageManager, packageJson) : []; if (isNewFolder) { babelDependencies.push(...getStorybookBabelDependencies()); diff --git a/lib/cli/src/project_types.ts b/lib/cli/src/project_types.ts index 71175d1005e3..b55a176da801 100644 --- a/lib/cli/src/project_types.ts +++ b/lib/cli/src/project_types.ts @@ -81,6 +81,7 @@ export const SUPPORTED_FRAMEWORKS: SupportedFrameworks[] = [ export enum CoreBuilder { Webpack4 = 'webpack4', Webpack5 = 'webpack5', + Vite = 'vite', } // The `& {}` bit allows for auto-complete, see: https://github.com/microsoft/TypeScript/issues/29729 diff --git a/lib/core-server/src/utils/get-manager-builder.ts b/lib/core-server/src/utils/get-manager-builder.ts index 5ee59b780585..12f64290aa04 100644 --- a/lib/core-server/src/utils/get-manager-builder.ts +++ b/lib/core-server/src/utils/get-manager-builder.ts @@ -13,10 +13,9 @@ export async function getManagerBuilder(configDir: Options['configDir']) { // - Everything else builds with `manager-webpack4` // // Unlike preview builders, manager building is not pluggable! - const builderPackage = - builderName === 'webpack5' - ? require.resolve('@storybook/manager-webpack5', { paths: [main] }) - : '@storybook/manager-webpack4'; + const builderPackage = ['webpack5', '@storybook/builder-webpack5'].includes(builderName) + ? require.resolve('@storybook/manager-webpack5', { paths: [main] }) + : '@storybook/manager-webpack4'; const managerBuilder = await import(builderPackage); return managerBuilder;