Usando Storybook con Angular y Vite
Storybook es un taller frontend para construir componentes de UI y páginas de forma aislada.
Por defecto, Angular y Storybook usan Webpack para construir y servir la aplicación Storybook.
Este tutorial te guía a través del proceso de cambiar a construir y servir tu Storybook con Angular usando Vite. Este proceso se puede aplicar a cualquier proyecto de Angular que use Storybook.
Configurando Storybook
Si aún no tienes Storybook configurado, ejecuta el siguiente comando para inicializar Storybook para tu proyecto:
npx storybook@latest init
Sigue las indicaciones proporcionadas y haz commit de tus cambios.
Instalando los paquetes de Storybook y Vite
Instala el Vite Plugin para Angular y el Vite Builder para Storybook. Dependiendo de tu gestor de paquetes preferido, ejecuta uno de los siguientes comandos:
- npm
- yarn
- pnpm
- bun
npm install @analogjs/vite-plugin-angular @storybook/builder-vite --save-dev
yarn add @analogjs/vite-plugin-angular @storybook/builder-vite --dev
pnpm install @analogjs/vite-plugin-angular @storybook/builder-vite -w --save-dev
bun install @analogjs/vite-plugin-angular @storybook/builder-vite --save-dev
Configurando Storybook para usar el Vite Builder
Actualiza el archivo .storybook/main.ts
para usar @storybook/builder-vite
y añade la función de configuración viteFinal
para configurar el Vite Plugin para Angular.
import { StorybookConfig } from '@storybook/angular';
import { StorybookConfigVite } from '@storybook/builder-vite';
import { UserConfig } from 'vite';
const config: StorybookConfig & StorybookConfigVite = {
// otra configuración, addons, etc.
core: {
builder: {
name: '@storybook/builder-vite',
options: {
viteConfigPath: undefined,
},
},
},
async viteFinal(config: UserConfig) {
// Fusiona la configuración personalizada con la configuración por defecto
const { mergeConfig } = await import('vite');
const { default: angular } = await import('@analogjs/vite-plugin-angular');
return mergeConfig(config, {
// Agrega dependencias para pre-optimización
optimizeDeps: {
include: [
'@storybook/angular',
'@storybook/angular/dist/client',
'@angular/compiler',
'@storybook/blocks',
'tslib',
],
},
plugins: [angular({ jit: true, tsconfig: './.storybook/tsconfig.json' })],
});
},
};
Elimina la función de configuración existente webpackFinal
si está presente.
Luego, actualiza el package.json
para ejecutar los comandos de Storybook directamente.
{
"name": "my-app",
"scripts": {
"storybook": "storybook dev --port 4400",
"build-storybook": "storybook build"
}
}
También puedes eliminar los targets de Storybook en el angular.json
Si estás usando Nx, actualiza los targets de Storybook en tu project.json
para ejecutar los comandos de Storybook:
"storybook": {
"executor": "nx:run-commands",
"options": {
"cwd": "apps/my-app",
"command": "storybook dev --port 4400"
}
},
"build-storybook": {
"executor": "nx:run-commands",
"options": {
"cwd": "apps/my-app",
"command": "storybook build --output-dir ../../dist/storybook/my-app"
}
}
Añade la carpeta /storybook-static
a tu archivo .gitignore
.
Ejecutando Storybook
Ejecuta los comandos de Storybook directamente para correr el servidor de desarrollo.
npm run storybook
Construyendo Storybook
Ejecuta los comandos de Storybook para construir el Storybook.
npm run build-storybook