You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级NextJS 12后Storybook中styled-jsx样式失效如何解决?

问题原因

该问题是因为NextJS内置了styled-jsx的编译处理,而Storybook使用独立的编译流程,升级到webpack5后,原有的配置没有将styled-jsx的babel插件注入到Storybook的编译链路中,导致带jsx属性的style标签没有被正确转译生成对应的样式代码。

解决步骤

  1. 修正Storybook webpack配置中的alias覆盖问题
    你当前配置直接对config.resolve.alias赋值,会覆盖Storybook的默认alias配置,可能导致依赖解析异常,修改为扩展原有配置:
// .storybook 下的webpack配置文件
config.resolve.alias = {
  ...config.resolve.alias, // 保留默认配置
  'sentry-alias': '@sentry/browser',
  '@/remoteConfig': './standardRemoteConfig',
};
  1. 在Storybook配置中加入styled-jsx的babel插件
    在.storybook/main.js中新增babel配置项,注入styled-jsx的编译插件:
// .storybook/main.js
module.exports = {
  core: {
    builder: 'webpack5',
  },
  // 新增babel配置
  babel: async (options) => {
    options.plugins.push(require.resolve('styled-jsx/babel'));
    // 如果你的项目中styled-jsx有特殊配置(比如自定义类名前缀、优化选项),这里同步配置即可
    // options.plugins.push([require.resolve('styled-jsx/babel'), { optimizeForSpeed: true }])
    return options;
  },
  stories: ['../stories/**/*.stories.tsx'],
  addons: [
    // 原有addons保持不变
    '@storybook/addon-actions',
    '@storybook/addon-links',
    '@storybook/addon-backgrounds',
    '@storybook/addon-knobs',
    '@storybook/addon-viewport',
    '@storybook/addon-a11y',
    'storybook-addon-paddings',
  ],
};
  1. 验证styled-jsx版本兼容性
    如果上述配置后仍未生效,建议将styled-jsx升级到5.x的最新稳定版本,避免5.0.0本身的兼容bug。
  2. 可选:检查Babel配置继承
    如果项目根目录有独立的babel.config.js/.babelrc,确保其中已经配置了styled-jsx/babel插件,可在Storybook的babel配置中开启继承项目配置的选项,避免重复配置。

配置完成后重启Storybook即可看到styled-jsx生成的样式标签正常注入到DOM中,样式加载恢复正常。

内容的提问来源于stack exchange,提问作者Igor Shmukler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:45:02