CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-storybook--builder-webpack4

Webpack 4-based builder for Storybook that provides framework-agnostic build engine for preview iframe compilation and bundling.

91

1.01x
Overview
Eval results
Files

preset-system.mddocs/

Preset System

Modular preset system for framework-specific and custom webpack configurations, providing entry point management, plugin configuration, and extensible webpack customization through Storybook's preset architecture.

Capabilities

Core Presets

Built-in preset paths for core Storybook builder functionality.

/**
 * Core preset paths for essential builder functionality
 * Includes preview-preset for webpack configuration and entry management
 */
const corePresets: string[];

Usage Examples:

// In .storybook/main.js
module.exports = {
  core: {
    builder: 'webpack4',
  },
  // Core presets are automatically included
};

Override Presets

Override preset paths for custom webpack configuration handling.

/**
 * Override preset paths for custom webpack configuration
 * Includes custom-webpack-preset for user configuration integration
 */
const overridePresets: string[];

Usage Examples:

// Custom webpack configuration is automatically detected and loaded
// through override presets when webpack.config.js exists in config directory

Preview Preset Functions

Preview preset provides webpack configuration and entry point management for the Storybook preview iframe.

/**
 * Generates webpack configuration for preview iframe
 * @param _ - Unused first parameter (preset convention)
 * @param options - Storybook options with framework and configuration settings
 * @returns Promise resolving to webpack Configuration
 */
function webpack(_: any, options: any): Promise<Configuration>;

/**
 * Generates entry points for preview iframe including HMR client in development
 * @param _ - Unused first parameter (preset convention)
 * @param options - Storybook options with configuration type and settings
 * @returns Promise resolving to array of entry point paths
 */
function entries(_: any, options: any): Promise<string[]>;

Usage Examples:

// Preview preset is automatically applied through core presets
// It generates comprehensive webpack configuration including:
// - HTML webpack plugin for iframe generation
// - Virtual modules for story and config files
// - Asset loaders and optimization
// - Development server configuration

Custom Webpack Preset Functions

Custom webpack preset handles user-defined webpack configurations and framework integration.

/**
 * Applies custom webpack configuration with framework integration
 * @param config - Base webpack configuration from Storybook
 * @param options - Storybook options including config directory and webpack config
 * @returns Promise resolving to final webpack configuration
 */
function webpack(config: Configuration, options: Options): Promise<Configuration>;

/**
 * Provides webpack instance for compilation
 * @returns Promise resolving to webpack module
 */
function webpackInstance(): Promise<typeof webpack>;

/**
 * Provides webpack version for compatibility checking
 * @returns Promise resolving to version string
 */
function webpackVersion(): Promise<string>;

Usage Examples:

// Custom webpack configurations are automatically detected:

// 1. Through webpackConfig option
const storybookOptions = {
  webpackConfig: (config) => {
    config.resolve.alias['@'] = path.resolve(__dirname, 'src');
    return config;
  },
};

// 2. Through webpack.config.js file in config directory
// webpack.config.js
module.exports = ({ config, mode }) => {
  if (mode === 'DEVELOPMENT') {
    config.devtool = 'eval-source-map';
  }
  return config;
};

// 3. Through webpackFinal preset
// .storybook/main.js
module.exports = {
  webpackFinal: (config) => {
    config.module.rules.push({
      test: /\.scss$/,
      use: ['style-loader', 'css-loader', 'sass-loader'],
    });
    return config;
  },
};

Preset Integration

Framework-Specific Presets

The preset system integrates with framework-specific configurations:

  • Framework Options: Applied through ${framework}Options preset
  • TypeScript Integration: TypeScript options applied through typescript preset
  • Babel Configuration: Babel options applied through babel preset
  • Framework Compatibility: Framework-specific webpack configurations

Preset Application Order

Presets are applied in a specific order for proper configuration layering:

  1. Base Configuration: Core webpack configuration generation
  2. Framework Presets: Framework-specific modifications
  3. User Presets: Custom preset configurations
  4. webpackFinal: Final user modifications
  5. Custom Config: User webpack.config.js file (full control mode)

Entry Point Management

The preset system manages entry points for different scenarios:

  • Development Mode: Includes webpack-hot-middleware client for HMR
  • Production Mode: Optimized entry points without development middleware
  • Story Entries: Virtual modules for story and configuration files
  • Framework Entries: Framework-specific entry point requirements

Configuration Modes

Full Control Mode

When a custom webpack configuration function is detected:

// webpack.config.js - Full control mode
module.exports = ({ config, mode }) => {
  // User has full control over configuration
  return customWebpackConfig;
};

Default Mode

When no custom configuration is provided:

// Uses default Webpack4 setup with:
// - Standard loaders and plugins
// - Framework-specific configurations  
// - Storybook-optimized settings

Preset Extension Mode

When using webpackFinal in main.js:

// .storybook/main.js - Preset extension mode
module.exports = {
  webpackFinal: (config) => {
    // Modify existing configuration
    return enhancedConfig;
  },
};

Advanced Features

Virtual Module Generation

The preset system creates virtual modules for:

  • Story Files: Generated modules containing story imports and configuration
  • Config Files: Virtual modules for preview configuration loading
  • Entry Points: Dynamic entry point generation based on story patterns

Plugin Integration

Automatic plugin configuration including:

  • HTML Webpack Plugin: For iframe HTML generation
  • Progress Plugin: For build progress reporting
  • Hot Module Replacement: For development mode HMR
  • Case Sensitive Paths: For cross-platform compatibility
  • Fork TS Checker: For TypeScript type checking
  • Terser Plugin: For production minification

Asset Processing

Comprehensive asset processing through preset configuration:

  • CSS Processing: Style-loader, css-loader, postcss-loader
  • File Assets: File-loader for images, fonts, and static assets
  • TypeScript/JavaScript: Babel-loader with framework-specific extensions
  • Source Maps: Development and production source map generation

Install with Tessl CLI

npx tessl i tessl/npm-storybook--builder-webpack4

docs

builder-operations.md

configuration-system.md

index.md

preset-system.md

tile.json