Рубрики
Без рубрики

Как я мигрировал книгу рассказов React с V5.3 на v6

Если вы доберетесь до этой статьи, это потому, что вы уже знакомы с сборниками рассказов и хотите переместить F … Tagged with Storybook, React, JavaScript, Frontend.

Если вы доберетесь до этой статьи, это потому, что вы уже знакомы с Сборник рассказов И вы хотите перейти к новым и классным вещам:). Я дам вам свою простую старую конфигурацию и расскажу вам о своем приключении об обновлении от V5.3 до V6.

Примечание: Я думаю, что это должно работать также для V5, так как я не изменил свою конфигурацию сборника рассказов на обновлениях на v5.3.

Ну, моя конфигурация для V5.3 была:

// .storybook/config.js

import {addParameters} from '@storybook/react';
import '../src/styles/App.scss'; // all my app styles because I don't import them in each component
import './styles.scss'; // with some overrided styles for Storyb
import theme from './theme';

addParameters({
  options: {theme}
});
// .storybook/main.js

module.exports = {
  stories: ['../src/components/**/*.stories.js'],
};
// .storybook/theme.js

import {create} from '@storybook/theming';
import gigedsLogo from '../src/statics/logo.png';

export default create({
  base: 'light',
  brandTitle: 'Gigeds',
  brandImage: gigedsLogo,
  colorSecondary: '#de2020'
});
// .storybook/webpack.config.js

const path = require('path');

function resolve(dir) {
  return path.join(__dirname, dir);
}

module.exports = {
  module: {
    rules: [
      {
        test: /\.(sa|sc|c)ss$/,
        use: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader'],
      },
      {
        test: /\.(jpg|jpeg|png|svg|gif)$/,
        use: [
          {
            loader: 'file-loader',
            options: {
              limit: 1000000,
              name: `statics/images/[name].[ext]`,
            },
          },
        ],
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'file-loader',
        options: {
          limit: 10000,
          name: `statics/fonts/[name].[ext]`,
        },
      },
    ]
  },
  resolve: {
    extensions: ['.js', '.jsx', '.json', '.css', '.scss'],
    modules: [resolve('../node_modules')],
    alias: {
      components: resolve('../src/components'),
      views: resolve('../src/views'),
      statics: resolve('../src/statics'),
    },
  },
};

Как видите, конфигурация очень проста, без плагинов и с некоторыми изменениями в теме и пользовательской конфигурации WebPack. Представьте, что у вас есть сборник рассказов, работающий нормально И вы только что обновили его от V5.3 до V6, затем запустите сценарий пряжа SB (В вашем случае может быть ... компиляция ... и бам!

ERR! Error: You have both a "main" and a "config". Please remove the "config" file from your configDir

Hm … если я удалю свою конфигурацию, мне нужно загрузить свои стили и где -то свою индивидуальную тему 😕. Ну, давайте удалим наш config.js И перейдите к документации, чтобы увидеть, как это исправить. Пойдем в Документация по конфигурации темы Анкет Бинго! Установите пару новых пакетов Yarn Add -dev @Storybook/Addons @Storybook/Theming Затем создайте ./manager.js Чтобы загрузить свою индивидуальную тему 💪

// ./manager.js
@see https://storybook.js.org/docs/react/configure/theming#create-a-theme-quickstart

import { addons } from '@storybook/addons';
import { themes } from '@storybook/theming';

addons.setConfig({
  theme: themes.dark,
});

ПРИМЕЧАНИЕ: Вначале я только что скопировал и вставил все то, что у меня было в моем ./config.js А потом побежал пряжа SB и получил ошибку:

ERROR in ./src/styles/App.scss 2:0
Module parse failed: Unexpected character '@' (2:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders

Это было потому, что я импортировал App.scss Файл, который больше не нужен в V6.

Итак, здесь мы идем снова, запустим пряжа SB а также … 😏 Бам! Кровавый терминал

A lot of errors, one per `.jsx` file which has `.scss` import.

Я подумал, чтобы добавить конфигурацию WebPack где -нибудь. После хорошего дайвинга в документации я нашел Пользовательская конфигурация WebPack Что довольно ясно, но потом я понял, где загрузить все истории, и в документации ничего не упоминается о Загрузка историй + конфигурация WebPack одновременно . С ними всегда обращаются отдельно. Поэтому я только что добавил их в тот же модуль.

// ./main.js

const custom = require('./webpack.config.js');

module.exports = {
  stories: ['../src/components/**/*.stories.js'],
  webpackFinal: (config) => {
    return {
      ...config,
      module: {
        ...config.module,
        rules: custom.module.rules,
      },
      resolve: {
        ...config.resolve,
        ...custom.resolve,
      }
    };
  },
};

Затем запустить пряжа SB и … бум?,) Браузер открылся, загрузка сборников рассказов … загрузка … загрузка … 😕 Нам все еще что -то упускаем … Давайте проверим терминал. Ой! Много предупреждений (по одному на компонент):

...
WARNING in ./src/components/alert/Alert.stories.js 10:4
Module parse failed: Unexpected token (10:4)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
...

Кажется Вабел-загрузчик Отсутствует в нашей конфигурации WebPack, которая в моем случае с Storybook v5.3 не было необходимым, поэтому давайте добавим его.

// .storybook/webpack.config.js

const path = require('path');

function resolve(dir) {
  return path.join(__dirname, dir);
}

module.exports = {
  module: {
    rules: [
      ...
      {
         test: /\.(js|jsx)$/,
         exclude: /node_modules/,
         use: [
           'babel-loader',
             {
               loader: 'eslint-loader',
               options: {
                 cache: true,
                 emitWarning: true,
               },
             },
         ],
      },
...

Теперь снова запустить SB , компиляция … Браузер открылся … Загрузка сборника рассказов … загрузка … Бум! 💓 Мы сделали это! Справочник, загруженный всеми компонентами 🎉 Легко ха? 😉

Резюме

Если у вас такая же конфигурация, что и у меня, тогда:

  1. Удалить config.js
  2. Создайте Manager.js, чтобы загрузить вашу тему
  3. В вашем Main.js загружайте истории и Конфигурация WebPack
  4. Добавьте вабел-загрузчик в конфигурацию WebPack

Подробнее: Миграционная документация и Конфигурация сборника рассказов

Спасибо за чтение, комментарии приветствуются.

Изображение по Antonios ntoumas от Pixabay

Оригинал: “https://dev.to/ozaytsev86/how-i-migrated-react-storybook-from-v5-3-to-v6-3knc”