十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Storybook 项目启用 SWC 编译器:用 storybook add 一键安装 @storybook/addon-webpack5-compiler-swc

Storybook 项目启用 SWC 编译器:用 storybook add 一键安装 @storybook/addon-webpack5-compiler-swc Storybook 项目启用 SWC 编译器用 storybook add 一键安装 storybook/addon-webpack5-compiler-swc导读本文围绕 Storybook 官方文档中用于自动安装 SWC 编译器插件的代码片段展开完整讲解在基于 Webpack 5 的 Storybook 项目中接入 SWC 编译所需的全部步骤从三种包管理器下storybook add的安装命令到插件启用后对构建管线产生的实际影响再到通过main.js|ts中swc字段的深度定制。读完本文你将能在 React/Webpack 系 Storybook 项目中快速复现 SWC 编译器插件的完整接入流程并能结合仓库源码理解其工作原理。一、这个安装片段来自哪里先定位它的使用场景本片段文件 docs/_snippets/storybook-addon-compiler-swc-auto-install.md 是 Storybook 文档体系中的一段可复用代码片段它本身不包含任何叙述性文字而是被两处权威文档按需引用在 Webpack builder 文档的 Compiler support / SWC 小节中它是启用 SWC 编译器插件的官方安装命令在 React Webpack5 框架文档的 FAQ How do I manually install the React Webpack framework? 中它是手工初始化 React Webpack 应用后安装编译器插件SWC 或 Babel 二选一的推荐步骤。也就是说这段命令是一个独立于具体框架、对所有 Webpack 5 系 Storybook 项目通用的接入入口。理解它的前提是知道 Storybook 在编译层面采取的策略。二、背景Storybook 对编译器保持中立插件决定用 SWC 还是 Babel根据 Webpack builder 文档 的说明Storybook 在打包上采取**编译器中立compiler-agnostic**策略——它并不强制锁定某一种编译器而是允许你把项目自身使用的编译器Babel 或 SWC带进 Storybook 的构建流程Storybook takes a compiler-agnostic approach to bundling. This allows you to bring your own application bundler (e.g., Babel, SWC) and ensures compatibility within the vast ecosystem of Webpack 5-based projects.在这个策略下两个官方编译器插件承担了桥接职责插件包适用场景storybook/addon-webpack5-compiler-swc项目本身使用 SWC 编译storybook/addon-webpack5-compiler-babel项目依赖 Babel 工具链提供 TypeScript 或现代 JS 特性支持本文的关联片段针对前者。对 Babel 场景官方提供了结构完全对称的安装片段 docs/_snippets/storybook-addon-compiler-babel-auto-install.md。选择 SWC 的典型动机是它用 Rust 编写编译速度更快同时能与项目内已有的.swcrc配置无缝对齐减少 Storybook 预览环境与业务应用之间的行为差异。三、核心步骤三种包管理器下的自动安装命令片段给出的命令统一使用 Storybook CLI 的add子命令安装并注册插件以下三种形式完全等价请按你的包管理器选择其一npmnpx storybooklatest add storybook/addon-webpack5-compiler-swcpnpmpnpm dlx storybooklatest add storybook/addon-webpack5-compiler-swcyarnyarn dlx storybooklatest add storybook/addon-webpack5-compiler-swc执行时需要注意的三点latest标签storybooklatest保证拉取的是当前最新的 CLI 版本使安装逻辑与插件生态保持同步add子命令与npx storybook add addon一样它会在安装插件依赖的同时完成注册把插件写入项目的 addons 配置.storybook/main.js|ts的addons数组避免手工安装后再手工登记的两步操作包管理器一致性请使用与你项目锁文件一致的工具执行pnpm项目不要用npm否则可能产生额外的依赖结构差异。四、安装后发生了什么插件对构建管线的实际改动安装完成后插件并不是一个UI 增强型 addon而是一个预设型preset编译器插件。根据 Webpack builder 文档的 SWC 小节 的说明它启用后主要做两件事调整 Webpack 配置使用swc-loader处理 JavaScript 与 TypeScript 文件替换 Storybook 默认的编译链路自动探测并使用你项目已有的 SWC 配置即项目根部的.swcrc文件或 package.json 中的swc字段从而让 Storybook 的编译行为尽量贴近你应用本身的编译结果。从仓库源码也能交叉印证这条技术路线在脚手架服务 code/lib/create-storybook/src/services/AddonService.test.ts 中测试用例getWebpackCompilerAddon清晰地展示了编译器插件的选择映射——当检测到编译函数返回swc时对应的插件包就是storybook/addon-webpack5-compiler-swc返回babel时则映射到storybook/addon-webpack5-compiler-babel见 AddonService.test.ts。这证明该插件是 Storybook 脚手架体系内SWC 编译方案的官方落点在 sandbox 模板编排 code/lib/cli-storybook/src/sandbox-templates.ts 中同样可以看到某个 Webpack 模板把默认的 SWC 编译器插件替换为storybook/addon-webpack5-compiler-babel的逻辑说明这两枚编译器插件在模板体系中是可互换、按需注入的该插件启用后读取的项目级 SWC 配置格式即.swcrc本仓库根部的 code/.swcrc 就是一个典型示例文件。五、适用框架范围与已知例外接入该插件的前提是你的 Storybook 使用 Webpack 5 builder 构建。在支持范围内swc配置 API 文档 明确指出有四个框架除外它们不受该插件的swc配置定制影响AngularCreate React AppCRAEmber.jsNext.js原因各不相同但都指向框架自身接管了编译配置例如 CRA 场景由storybook/preset-create-react-app提供完整特性支持见 react-webpack5.mdx 的相关说明Next.js 则由其框架预设自带编译链。因此在上述框架项目中不应也不需要额外手动接入该插件。对于手工初始化的 React Webpack 应用官方在 React Webpack5 手册安装 FAQ 中给出的完整顺序是先安装storybook/react-webpack5框架再执行本文的片段安装编译器插件SWC 优先或退而求其次用 Babel最后在.storybook/main.js|ts中把framework.name指向对应框架包。六、进阶定制通过swc字段覆盖编译器选项插件安装只是第一步。当需要针对 Storybook 的编译行为做定制时官方在.storybook/main.js|ts中提供了顶层swc字段。根据 main-config-swc.mdx其类型签名是(config: swc.Options, options: Options) swc.Options | Promiseswc.Options即在编译前接收当前的 SWC 配置对象与 Storybook 运行选项返回合并后的新配置。一个完整可用的最小示例源自 docs/_snippets/main-config-swc.md// .storybook/main.js export default { framework: { name: storybook/your-framework, // 例如 storybook/react-webpack5 options: {}, }, swc: (config, options) { return { ...config, // Apply your custom SWC configuration }; }, };若用 TypeScript可显式引入swc/core的类型以得到完整的配置提示// .storybook/main.ts import type { Options } from swc/core; import type { StorybookConfig } from storybook/your-framework; const config: StorybookConfig { framework: { name: storybook/your-framework, options: {}, }, swc: (config: Options, options): Options { return { ...config, // Apply your custom SWC configuration }; }, }; export default config;一个典型的实战场景是把 React JSX 运行时切换到automatic该写法在 docs/_snippets/main-config-swc-jsx-transform.md 中有完整呈现// .storybook/main.js export default { framework: { name: storybook/your-framework, options: {}, }, swc: (config, options) ({ jsc: { transform: { react: { runtime: automatic, }, }, }, }), };注意swc字段下所有自定义选项仅在启用了storybook/addon-webpack5-compiler-swc插件时才生效见 main-config-swc.mdx 的原话提醒。options参数还带有configType取值为DEVELOPMENT | PRODUCTION可用于区分 dev 与 build 环境分别施加不同编译策略。七、安装后的验证与常见注意点完成安装后可从三个层面确认插件生效检查注册打开.storybook/main.js|ts确认addons数组或由storybook add自动改写的配置中已包含storybook/addon-webpack5-compiler-swc检查依赖确认package.json中已写入对应插件包及其传递依赖swc-loader相关行为验证在.swcrc中临时加入一项肉眼可感知的转换配置如 JSX runtime 切换若预览渲染行为随之变化说明swc-loader已接管编译。若你的项目从 Webpack 4 迁移而来请注意 Storybook 已移除 Webpack 4 支持升级会自动切到 Webpack 5此时恰是接入该 SWC 插件、替换旧编译链的时机详见 Webpack builder 文档的 Webpack 4 说明。结语从本片段出发可以看到 Storybook 编译器插件的完整接入图谱一段命令解决安装注册一个预设插件接管swc-loader并复用项目.swcrc一个swc顶层配置字段完成细粒度定制而仓库中的 AddonService 测试 与 sandbox 模板 则为这条链路提供了源码级的佐证。对于任何追求编译速度与配置一致性的 Webpack 5 系 Storybook 项目按上述步骤即可在几分钟内完成 SWC 编译器的接入与验证。延伸阅读完整 Webpack builder 指南含 Babel/SWC 编译器对比与调试方法docs/builders/webpack.mdxswc配置项 API 参考docs/api/main-config/main-config-swc.mdx同类 Babel 编译器插件安装片段docs/_snippets/storybook-addon-compiler-babel-auto-install.mdReact Webpack5 框架手工安装流程docs/get-started/frameworks/react-webpack5.mdx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表