What is @storybook/core-webpack?
The @storybook/core-webpack package is a part of the Storybook ecosystem, specifically designed to customize and extend Storybook's Webpack configurations. It allows developers to modify the default Webpack configuration used by Storybook to better suit their project's needs, including adding loaders, plugins, and modifying existing configurations. This package is essential for projects that require a high degree of customization for their Storybook setup, enabling seamless integration with a wide range of web development tools and workflows.
What are @storybook/core-webpack's main functionalities?
Customizing Webpack Config
This feature allows developers to customize the Webpack configuration used by Storybook. The code sample demonstrates how to merge a custom Webpack configuration with Storybook's default configuration, specifically adding support for SCSS files.
const { merge } = require('webpack-merge');
module.exports = ({ config }) => {
return merge(config, {
// Custom Webpack configuration
module: {
rules: [{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }]
}
});
};
Adding Webpack Plugins
Developers can extend Storybook's Webpack configuration by adding additional Webpack plugins. The code sample shows how to add a custom plugin to the configuration.
const SomeWebpackPlugin = require('some-webpack-plugin');
module.exports = ({ config }) => {
config.plugins.push(new SomeWebpackPlugin());
return config;
};
Modifying Existing Loaders
This functionality allows for the modification of existing loaders in the Webpack configuration. The code sample illustrates how to find and modify a specific loader to add an additional 'some-loader' for handling files.
module.exports = ({ config }) => {
const rules = config.module.rules;
const someRuleIndex = rules.findIndex(rule => rule.test.toString() === '/\.somefile$/');
if (someRuleIndex !== -1) {
rules[someRuleIndex].use.push('some-loader');
}
return config;
};
Other packages similar to @storybook/core-webpack
webpack-merge
While not a Storybook-specific package, webpack-merge is often used in conjunction with @storybook/core-webpack for merging custom Webpack configurations with Storybook's default. It provides a streamlined way to combine configurations, which is essential for complex setups.
customize-cra
customize-cra is designed for overriding Create React App's Webpack configurations without 'ejecting'. It offers a similar value proposition to @storybook/core-webpack but is specifically tailored for CRA projects. Unlike @storybook/core-webpack, it doesn't directly integrate with Storybook but demonstrates the demand for customization in tooling environments.
Storybook Core-Common
Common utilities used across @storybook/core-server
(manager UI configuration) and @storybook/builder-webpack{4,5}
(preview configuration).
This is a lot of code extracted for convenience, not because it made sense.
Supporting multiple version of webpack and this duplicating a large portion of code that was never meant to be generic caused this.
At some point we'll refactor this, it's likely a lot of this code is dead or barely used.
8.6.0
The 8.6 release focuses on Storybook Test, which brings realtime component, accessibility, and visual UI tests to your favorite component workshop.
Here’s what’s new:
- 🎁 Storybook Test installer for out-of-the-box tests in new projects
- 🦾 Accessibility “todo” workflow to systematically fix a11y violations
- 🗜️ 80% smaller create-storybook package for much faster installs
- 🧪 Dozens of Test fixes based on user feedback
- 📕 Docs fixes for table of contents, code snippets, and more
- 🚨 Key security fixes for Vite and ESbuild
- 💯 Hundreds more improvements
<details>
<summary>List of all updates</summary>
- Addon A11y: Introduce parameters.a11y.test - #30516, thanks @valentinpalkovic!
- Addon-A11y: Fix preset loading when loaded via getAbsolutePath - #30563, thanks @valentinpalkovic!
- Addon-Docs: Change URL hash when TOC item is clicked, and fix TOC loading bugs - #30130, thanks @Sidnioulz!
- Addon-docs: Consider custom code snippet in story code panel and update styles - #30179, thanks @larsrickert!
- Addon-Test: Add telemetry data for Focused Tests - #30568, thanks @JReinhold!
- Addon-Test: Fix config and watch mode inconsistencies - #30491, thanks @JReinhold!
- Addon-Test: Fix console error in build mode - #30625, thanks @JReinhold!
- Addon-Test: Make sure that only one global portable story config is ever loaded - #30582, thanks @kasperpeulen!
- Angular: Fix accent character issue - #30276, thanks @valentinpalkovic!
- Angular: Support experimental zoneless mode - #28657, thanks @anedomansky!
- Angular: Support v19.2 when @angular/animations is not installed - #30611, thanks @valentinpalkovic!
- Builder-Vite: Fix resolve id warning - #30511, thanks @valentinpalkovic!
- Builder-Vite: Fix runtime and iframe 404 on first load - #30567, thanks @valentinpalkovic!
- Bun: Add support for text lock file - #30160, thanks @Arctomachine!
- Cleanup: Remove unused constants in viewport addon - #30479, thanks @Guria!
- CLI: Don't initially select Documentation and Testing features - #30599, thanks @ghengeveld!
- CLI: Fix peer dep issues for npm users during upgrade - #30616, thanks @valentinpalkovic!
- CLI: Fix printing of selected features - #30605, thanks @ghengeveld!
- CLI: Make telemetry data an object - #30581, thanks @ndelangen!
- CLI: Prompt users for RN vs RNW on init - #30635, thanks @shilman!
- CLI: Reimplement features prompt logic to handle
--yes
and fix --features
- #30534, thanks @ghengeveld! - CLI: Remove Storybook dependencies before adding re-adding them - #30600, thanks @valentinpalkovic!
- CLI: Use correct storybook internals import in automigration - #30290, thanks @yannbf!
- Codemod: Always get real path of files - #30650, thanks @yannbf!
- Codemod: Handle addon essentials differently in csf factories - #30649, thanks @yannbf!
- Codemod: Migrate meta.args to meta.input.args in csf factories - #30641, thanks @yannbf!
- Codemod: Use real path from symbolic links - #30642, thanks @yannbf!
- Core: Add
UniversalStore
API to sync state/events between multiple environments - #30445, thanks @JReinhold! - Core: Add connection timeout notification - #30288, thanks @valentinpalkovic!
- Core: Allow empty render functions in CSF factories - #30565, thanks @kasperpeulen!
- Core: Always place cache dir inside
node_modules
- #30643, thanks @ndelangen! - Core: Don't set process.env.NODE_ENV and process.env.DEV - #30651, thanks @valentinpalkovic!
- Core: Fix addon essentials preview preset - #30647, thanks @yannbf!
- Core: Fix extracting import path when it's not a core addon - #30640, thanks @yannbf!
- Core: Fix invalid Websocket termination - #30408, thanks @valentinpalkovic!
- Core: Fix statically serving single files and multiple dirs on the same endpoint - #30467, thanks @JReinhold!
- Core: Fix undeclared internal dependencies - #30566, thanks @kasperpeulen!
- Core: Improve type compatibility with React 19 - #30031, thanks @mrginglymus!
- Core: Move CSF to monorepo - #30488, thanks @kasperpeulen!
- Csf Tools: Allow ConfigFile to create more import syntaxes - #30204, thanks @yannbf!
- CSF: Add support for CSF factories - #30197, thanks @kasperpeulen!
- Essentials: Fix
addon-essentials
not working when used with getAbsolutePath
- #30557, thanks @JReinhold! - Manager: Escape single quotes in dynamic import paths in wrapManagerEntries function - #30278, thanks @valentinpalkovic!
- Manager: Fix escaping of single quotes in dynamic import paths - #30278, thanks @valentinpalkovic!
- Manager: Fix panel reactivity - #30638, thanks @valentinpalkovic!
- React: Fix incorrect import in preview.ts - #30542, thanks @mrginglymus!
- Svelte: Fix conflicting variable names and support for
+page.svelte
files - #30369, thanks @xeho91! - Test addon: Only update
vitest.config.ts
with workspaces, otherwise create vitest.workspace.ts
- #30583, thanks @ghengeveld!
</details>