故事书-顺风。我应该如何将顺风添加到故事书中

Niv*_*han 30 typescript reactjs webpack storybook tailwind-css

我想在故事书中添加顺风。这样 Stories 就会像在 Web 上一样呈现。

我曾经create-react-app project-name --template typescript创建过这个项目。

然后为了安装tailwind,我遵循了tailwind 文档中的https://tailwindcss.com/docs/guides/create-react-app指令。

完成后,我运行了代码npm sb init。这确保了故事书的运行。

现在我需要告诉 storybook 使用 tailwindcss 进行样式设置。但我不知道如何。

我看到的每个其他答案都告诉编辑postcss.config.js文件。

但我遵循了这个https://tailwindcss.com/docs/guides/create-react-app文档,我什至不必创建 postcss.config.js 文件。所以我很困惑现在该怎么办。

为了清楚起见,我将在下面包含一些配置文件。

craco.config.js

module.exports = {
    style: {
      postcss: {
        plugins: [
          require('tailwindcss'),
          require('autoprefixer'),
        ],
      },
    },
  }

Run Code Online (Sandbox Code Playgroud)

.storybook/preview.js

import "../src/index.css"

export const parameters = {
  actions: { argTypesRegex: "^on[A-Z].*" },
}
Run Code Online (Sandbox Code Playgroud)

.storybook/main.js

module.exports = {
  "stories": [
    "../src/**/*.stories.mdx",
    "../src/**/*.stories.@(js|jsx|ts|tsx)"
  ],
  "addons": [
    "@storybook/addon-links",
    "@storybook/addon-essentials",
    "@storybook/preset-create-react-app"
  ]
}
Run Code Online (Sandbox Code Playgroud)

src/index.css

@tailwind base;
@tailwind components;
@tailwind utilities;
Run Code Online (Sandbox Code Playgroud)

tailwind.config.js

module.exports = {
  purge: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html'],

  darkMode: false, // or 'media' or 'class'
  theme: {
    extend: {},
  },
  variants: {
    extend: {},
  },
  plugins: [],
}
Run Code Online (Sandbox Code Playgroud)

package.json

`{
  "name": "memory",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@craco/craco": "^6.0.0",
    "@tailwindcss/postcss7-compat": "^2.0.2",
    "@testing-library/jest-dom": "^5.11.4",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "@types/jest": "^26.0.15",
    "@types/node": "^12.0.0",
    "@types/react": "^16.14.2",
    "@types/react-dom": "^16.9.8",
    "autoprefixer": "^9.8.6",
    "postcss": "^7.0.35",
    "react": "^17.0.1",
    "react-dom": "^17.0.1",
    "react-scripts": "4.0.1",
    "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.0.2",
    "typescript": "^4.0.3",
    "web-vitals": "^0.2.4"
  },
  "scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test",
    "eject": "react-scripts eject",
    "storybook": "start-storybook -p 6006 -s public",
    "build-storybook": "build-storybook -s public"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@storybook/addon-actions": "^6.1.11",
    "@storybook/addon-essentials": "^6.1.11",
    "@storybook/addon-links": "^6.1.11",
    "@storybook/node-logger": "^6.1.11",
    "@storybook/preset-create-react-app": "^3.1.5",
    "@storybook/react": "^6.1.11"
  }
}

Run Code Online (Sandbox Code Playgroud)

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx"
  },
  "include": [
    "src"
  ]
}

Run Code Online (Sandbox Code Playgroud)

Yan*_*aga 38

您快到了。

配置中缺少的部分是添加一个 webpack 配置以将 tailwind 应用到postcss-loader

const path = require('path')

module.exports = {
  stories: [
    '../src/**/*.stories.mdx', 
    '../src/**/*.stories.@(js|jsx|ts|tsx)'
  ],
  addons: [
    '@storybook/addon-links',
    '@storybook/addon-essentials',
    '@storybook/preset-create-react-app',
  ],
  webpackFinal: async (config) => {
    config.module.rules.push({
      test: /\.css$/,
      use: [
        {
          loader: 'postcss-loader',
          options: {
            ident: 'postcss',
            plugins: [
              require('tailwindcss'),
              require('autoprefixer'),
            ],
          },
        },
      ],
      include: path.resolve(__dirname, '../'),
    })
    return config
  },
}

Run Code Online (Sandbox Code Playgroud)

  • 糟糕,我只需在 **.storybook/preview.js** 中添加 ```import "../src/index.css"``` (15认同)
  • 我必须导入 CSS 并更改选项字段,如下所示: `options: { postcssOptions: { plugins: [require("tailwindcss"), require("autoprefixer")]}}` 请参阅[此链接](https:// /github.com/ckeditor/ckeditor5/issues/8315#issuecomment-714313936)了解详细信息,对于格式表示抱歉! (2认同)

Nur*_*tov 12

TAILWIND 故事书 CRA [2022-2023(希望如此)]

包.json

"devDependencies": {
    "@storybook/addon-actions": "^6.5.9",
    "@storybook/addon-essentials": "^6.5.9",
    "@storybook/addon-interactions": "^6.5.9",
    "@storybook/addon-links": "^6.5.9",
    "@storybook/addon-postcss": "^2.0.0",
    "@storybook/builder-webpack5": "^6.5.9",
    "@storybook/manager-webpack5": "^6.5.9",
    "@storybook/node-logger": "^6.5.9",
    "@storybook/preset-create-react-app": "^4.1.2",
    "@storybook/react": "^6.5.9",
    "@storybook/testing-library": "^0.0.13",
    "@typescript-eslint/eslint-plugin": "^5.28.0",
    "@typescript-eslint/parser": "^5.28.0",
    "autoprefixer": "^10.4.7",
    "babel-plugin-named-exports-order": "^0.0.2",
    "eslint": "^8.17.0",
    "eslint-config-airbnb": "^19.0.4",
    "eslint-plugin-import": "^2.26.0",
    "eslint-plugin-jsx-a11y": "^6.5.1",
    "eslint-plugin-react": "^7.30.0",
    "eslint-plugin-react-hooks": "^4.6.0",
    "eslint-plugin-simple-import-sort": "^7.0.0",
    "postcss": "^8.4.14",
    "tailwindcss": "^3.1.1",
    "webpack": "^5.73.0"
  }
Run Code Online (Sandbox Code Playgroud)

tailwind.config.js

module.exports = {
    content: [
        "./src/**/*.{js,jsx,ts,tsx}",
    ],
    theme: {
        extend: {},
    },
    plugins: [],
}
Run Code Online (Sandbox Code Playgroud)

postcss.config.js

module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
}
Run Code Online (Sandbox Code Playgroud)

.storybook/main.js

module.exports = {
  stories: [
    "../src/**/*.stories.mdx",
    "../src/**/*.stories.@(js|jsx|ts|tsx)"
  ],
  addons: [
    "@storybook/addon-links",
    "@storybook/addon-essentials",
    "@storybook/addon-interactions",
    "@storybook/preset-create-react-app",
    {
      name: '@storybook/addon-postcss',
      options: {
        postcssLoaderOptions: {
          implementation: require('postcss'),
        },
      },
    },
  ],
  framework: "@storybook/react",
  core: {
    "builder": "@storybook/builder-webpack5"
  }
}
Run Code Online (Sandbox Code Playgroud)

.storybook/preview.js

import '!style-loader!css-loader!postcss-loader!tailwindcss/tailwind.css';

export const parameters = {
  actions: { argTypesRegex: "^on[A-Z].*" },
  controls: {
    matchers: {
      color: /(background|color)$/i,
      date: /Date$/,
    },
  },
}
Run Code Online (Sandbox Code Playgroud)


ofh*_*use 8

Storybook建议@storybook/addon-postcss从现在开始使用来自定义 postCSS 配置(而不是依赖于自定义postcss-loader):

  1. 将 postCSS 插件添加到您的安装中

    npm i -D @storybook/addon-postcss     # or
    yarn add -D @storybook/addon-postcss
    
    Run Code Online (Sandbox Code Playgroud)
  2. postcss.config.js在项目根目录下创建

    // postcss.config.js
    module.exports = {
      plugins: {
        tailwindcss: {},
        autoprefixer: {},
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将插件添加到您的 .storybook/main.js

    // .storybook/main.js
    module.exports = {
      ...
      addons: [
        ...
        {
          name: '@storybook/addon-postcss',
          options: {
            cssLoaderOptions: {
              // When you have splitted your css over multiple files
              // and use @import('./other-styles.css')
              importLoaders: 1,
            },
            postcssLoaderOptions: {
              // When using postCSS 8
              implementation: require('postcss'),
            },
          },
        },
      ],
    };
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将您的 css 文件导入 .storybook/preview.js

    // .storybook/preview.js
    import '../src/styles.css';
    
    Run Code Online (Sandbox Code Playgroud)

  • 由于某种原因,这对我不起作用。FWIW,我正在使用 postcss7,因为 tailwind 上的安装页面推荐使用 postcss7。``` SyntaxError (1:1) 未知单词 > 1 | var api = require("!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); | ^ 2 | var content = require("!!../node_modules/css-loader/dist/cjs.js??ref--10-1!../node_modules/postcss-loader/dist/cjs.js!./index. CSS”);```` (2认同)

Pei*_*ong 6

答案是正确的,但在最新的 CRA 中我必须这样配置:

config.module.rules.push({
      test: /\.css$/,
      use: [
        {
          loader: "postcss-loader",
          options: {
            // HERE: OPTIONS
            postcssOptions: {
              plugins: [require("tailwindcss"), require("autoprefixer")],
            },
          },
        },
      ],
      include: path.resolve(__dirname, "../"),
    });
Run Code Online (Sandbox Code Playgroud)


小智 5

与ofhouse的答案类似,但如果你不想有额外的,这里有一个解决方案postcss.config.js只添加几行或如果您想在所有内容中使用打字稿(因为加载器不会拾取 postcss.config.ts ),这里有一个解决方案

  1. 添加官方 postCSS 插件
npm i -D @storybook/addon-postcss
yarn add -D @storybook/addon-postcss
Run Code Online (Sandbox Code Playgroud)
  1. 配置 main.ts 和 tailwind.config.ts
/* .stories/main.ts */

import postcss from 'postcss';
import * as tailwindcss from '../tailwind.config';

import type { StorybookConfig } from '@storybook/react/types';

export const addons: StorybookConfig['addons'] = [
  // other addons,
  {
    name: '@storybook/addon-postcss',
    options: {
      postcssLoaderOptions: {
        implementation: postcss,
        postcssOptions: {
          plugins: {
            tailwindcss, // or you can nest your options entirely here
            autoprefixer: {
              // autoprefixer options
            },
          },
        },
      },
    },
  },
];
Run Code Online (Sandbox Code Playgroud)
/* tailwind.config.ts */

import type { TailwindConfig } from 'tailwindcss/tailwind-config';

export const theme: TailwindConfig['theme'] = {
  // theme options
}

// other options
Run Code Online (Sandbox Code Playgroud)