Closed20

StoryBook備忘録

とり天 こっこちゃんとり天 こっこちゃん

静的ページのStoryBook作りたい
storybook for htmlだ

インストール

npx -p @storybook/cli sb init --type html

Need to install the following packages:
  @storybook/cli
Ok to proceed? (y) 

は「y」

とり天 こっこちゃんとり天 こっこちゃん

Sassの設定

インストール

npm i -D style-loader css-loader sass-loader

.storybook/main.js

addons: [
    "@storybook/addon-links",
    "@storybook/addon-essentials",
    "@storybook/addon-interactions",
    "@storybook/preset-scss" // Sass追加
  ],

addondにsass追加

// Sassの読み込み
const { resolve } = require('path')

module.exports = {
  webpackFinal: async(config, {configType}) => {
    config.module.rules.push({
      test: /\.scss$/,
      use: [
        'style-loader',
        'css-loader',
        'sass-loader'
      ],
      include: resolve(__dirname, '../'),
    })
    return config
  }
}

ファイルの下あたりに追加読み込み系も追加

とり天 こっこちゃんとり天 こっこちゃん

とりあえずstories配下に
htmlとjsとsass準備

  • stories/components/hoge/index.html
  • stories/components/hoge/hoge.stories.js
  • stories/components/hoge/hoge.scss
とり天 こっこちゃんとり天 こっこちゃん

このエラー何.......?

ERR! Error: Could not find a 'framework' field in Storybook config.
ERR! 
ERR! Please run 'npx storybook@next automigrate' to automatically fix your config.
とり天 こっこちゃんとり天 こっこちゃん
Do you want to run the 'new-frameworks' migration on your project? › (Y/n)
Do you want to run the 'eslintPlugin' migration on your project? › (Y/n)
Do you want to run the 'autodocsTrue' migration on your project? › (Y/n)

このあたりはこちらを参考

とり天 こっこちゃんとり天 こっこちゃん

多分バージョンあげたためなのか

ERR! TypeError: Cannot read properties of undefined (reading 'map')

のエラーが出たので.storybook/main.jsの記述を直してみる

/** @type { import('@storybook/html-webpack5').StorybookConfig } */
const { resolve } = require('path');

module.exports = {
  stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
  addons: [
    "@storybook/addon-links",
    "@storybook/addon-essentials",
    "@storybook/addon-interactions",
    "@storybook/preset-scss" // Sass追加
  ],
  framework: {
    name: "@storybook/html-webpack5",
    options: {}
  },
  docs: {
    autodocs: "tag"
  },
  webpackFinal: async (config, {configType}) => {
    config.module.rules.push({
      test: /\.scss$/,
      use: ['style-loader', 'css-loader', 'sass-loader'],
      include: resolve(__dirname, '../')
    });
    return config;
  },
};
とり天 こっこちゃんとり天 こっこちゃん

アドオン追加

  • copy-code-block:htmlコピー
npm i @pickra/copy-code-block

hoge.stories.jsに次の内容を入れる

import copyCodeBlock from '@pickra/copy-code-block'

〜 省略  〜

export const Item = () => {
  return (fuga + copyCodeBlock(fuga))
}
とり天 こっこちゃんとり天 こっこちゃん

copy-code-blockの見え方をやめて
storybook-addon-htmlに変更

npm install @whitespace/storybook-addon-html

.storybook/main.jsのaddonに追加

"@whitespace/storybook-addon-html" 
とり天 こっこちゃんとり天 こっこちゃん

build用のコマンド
"scripts"に以下追加

▼package.json

"build-storybook": "storybook build -o htdocs/storybook/"

実行コマンド

npm run build-storybook
とり天 こっこちゃんとり天 こっこちゃん

背景のデフォルトカラーを変える

npm install @storybook/addon-backgrounds --save-dev

addonに以下追加
▼.storybook/main.js

'@storybook/addon-backgrounds',

▼.storybook/preview.js

import { withBackgrounds } from '@storybook/addon-backgrounds';

// デフォルトの背景色を設定
const backgrounds = [
  { name: 'Default', value: '#ff0000', default: true },
  { name: 'Dark', value: '#333333' },
];
addDecorator(withBackgrounds(backgrounds));
とり天 こっこちゃんとり天 こっこちゃん

背景の入れ方 その2

▼.storybook/preview.js

const preview = {
  parameters: {
    backgrounds: {
      default: 'twitter',
      values: [
        {
          name: 'main',
          value: '#f5f5f5'
        },
        {
          name: 'accent',
          value: '#4682b4'
        }
      ]
    },
};

▼個別にデフォルト設定したいストーリーのjs

export default {
  parameters: {
    backgrounds: {
      default: 'main'
    }
  }
};

これでdefort背景色を個別につけれる

とり天 こっこちゃんとり天 こっこちゃん

jQueryのプラグインを入れた時に出てくるこのエラー

$ is not a function

有効な回避方法ではないけれど

  1. jQueryの読み込みはコンポーネントのhtmlファイルの中に<script>で記載する
  2. プラグインのJSはcdnがあるものはcdnでhtmlファイルの中に記載する

既存ディレクトリの中にプラグインを入れていて、importで引っ張ろうとしてもパスが合っていてもエラーが出る場合がほとんどだったのでcdn読み込みが手っ取り早そう

main.js に設定追加する方法もあったけどこれは別なエラーが出たので
今回は設定していない↓
https://github.com/storybookjs/storybook/issues/15820#issuecomment-912308231

とり天 こっこちゃんとり天 こっこちゃん

viewport 楽な追加方法

import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'

const preview = {
  parameters: {
    viewport: {
      viewports: INITIAL_VIEWPORTS
    },
  },
};

これを.storybook/preview.jsに追記してStoryBook再起動するといろんなデバイスサイズで表示切り替えできるようになる

とり天 こっこちゃんとり天 こっこちゃん

さらにカスタムする場合はこんな感じになるのかな
※Viewportの設定は公式から持ってきている

export const customViewports = {
  kindleFire2: {
    name: 'Kindle Fire 2',
    styles: {
      width: '600px',
      height: '963px',
    },
  },
  kindleFireHD: {
    name: 'Kindle Fire HD',
    styles: {
      width: '533px',
      height: '801px',
    },
  },
};
このスクラップは2023/08/04にクローズされました