Webpack 4-based builder for Storybook that provides framework-agnostic build engine for preview iframe compilation and bundling.
91
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.
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 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 directoryPreview 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 configurationCustom 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;
},
};The preset system integrates with framework-specific configurations:
${framework}Options presettypescript presetbabel presetPresets are applied in a specific order for proper configuration layering:
The preset system manages entry points for different scenarios:
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;
};When no custom configuration is provided:
// Uses default Webpack4 setup with:
// - Standard loaders and plugins
// - Framework-specific configurations
// - Storybook-optimized settingsWhen using webpackFinal in main.js:
// .storybook/main.js - Preset extension mode
module.exports = {
webpackFinal: (config) => {
// Modify existing configuration
return enhancedConfig;
},
};The preset system creates virtual modules for:
Automatic plugin configuration including:
Comprehensive asset processing through preset configuration:
Install with Tessl CLI
npx tessl i tessl/npm-storybook--builder-webpack4evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10