This example shows a default set up of Storybook that includes the same build features as Next (built-in CSS support, module path aliases...).
/!\ This example includes experimental features. Use with-storybook
for a simpler but safer example.
Main version uses Webpack 5, but doesn't work.
Use branch "with-webpack-4" for a version that works (but uses Webpack 4).
For development purpose, please use the latest version of @next/plugin-storybook
from Next.js canary branch (clone Next, yarn, yarn dev).
Then link it using yalc. yarn link
will cause issues with Webpack version, while Yalc simulates a local NPM registry and is closer to real install.
# In next.js
cd packages/next-plugin-storybook
yalc publish
cd packages/next
yalc publish
# NOTE: you might also need to link packages/next the same way, in case you have unexpected errors
# In this repository
yalc link @next/plugin-storybook
yalc link next
And do this again on every local update of next-plugin-storybook.
Then, you need to make sure you are using the version of Webpack bundled by Next
# in this repo
cp node_modules/webpack/lib/index.js node_modules/webpack/lib/index.js.backup
cp ./.yalc/next/dist/compiled/webpack/bundle5.js node_modules/webpack/lib/index.js
We add example usage of Next.js core feature one at a time, and check if the @next/plugin-storybook
supports them correctly when we run Storybook. For instance, path aliases, styled JSX, CSS modules...
If not, we must improve @next/plugin-storybook
with relevant fixes.
This is mostly on Storybook side, Webpack 5 update is not completely stable (see storybookjs/storybook#14044). Currently we need resolutions to have only one version of Webpack and it doesn't seem to be enough.
See main issue here: vercel/next.js#19345 See absolute import issue here: storybookjs/storybook#11639
They don't work out-of-the box, but they can be supported by adding relevant package in @next/plugin-storybook
(vercel/next.js#19345 (comment)).
As of v6.0, Storybook has built-in TypeScript support, so no configuration is needed. If you want to customize the default configuration, refer to the TypeScript docs.
Deploy the example using Vercel:
Execute create-next-app
with npm or Yarn to bootstrap the example:
npx create-next-app --example with-storybook with-storybook-app
# or
yarn create next-app --example with-storybook with-storybook-app
npm run storybook
# or
yarn storybook
npm run build-storybook
# or
yarn build-storybook
You can use Vercel to deploy Storybook. Specify storybook-static
as the output directory.