公司动态
3种方法精简formik-antd打包体积:按需加载与Tree Shaking完全指南
3种方法精简formik-antd打包体积按需加载与Tree Shaking完全指南【免费下载链接】formik-antdSimple declarative bindings for Ant Design and Formik.项目地址: https://gitcode.com/gh_mirrors/fo/formik-antdformik-antd是一个连接 Formik 表单引擎与 Ant Designantd组件的 React 表单组件库让你只需给组件加一个name属性即可完成表单绑定。但不少新手装完后发现打包体积暴涨——其实罪魁祸首不是 formik-antd 本身而是它背后的 antd。本文教你用3 种方法通过按需加载与 Tree Shaking 精简打包体积从几 MB 瘦身到几百 KB。一、打包体积为什么变大先看懂 formik-antd 的包结构在做任何优化前先花 1 分钟看懂这个库的内部结构你会明白优化点在哪里。1. 零运行时依赖代码本身极小打开 package.json 可以看到dependencies为空antd、formik、react 全部是peerDependencies由你的项目提供。也就是说formik-antd 只有一层很薄的绑定代码真正占体积的是它引出的antd 组件和样式。2. 双格式构建lib 和 es 目录项目通过 TypeScript 编译出两份产物构建脚本见 package.json目录模块格式入口适合场景libCommonJSpackage.json 的main兼容老构建工具esES Modulepackage.json 的modulewebpack 等现代工具可 Tree Shakinges目录由 tsconfig.es.json 单独编译target为 es6保留了import/export语法这是 Tree Shaking 生效的前提。3. 关键配置sideEffects 字段package.json 中声明sideEffects: [ es/**/style/*, lib/**/style/* ]含义是只有样式文件有副作用其余 JS 文件都可以被打包工具安全地摇树tree shake掉。这是这个库对 Tree Shaking 友好的核心保证。4. 全量导入为什么会胖入口文件 src/index.ts 一次性导出了 26 个组件Input、Select、DatePicker、Table……。如果你写import { Form, Input } from formik-antd在部分构建配置下会把所有绑定组件及其背后的 antd 依赖全部打进包里。二、方法一手动按需加载 formik-antd 组件最轻量适合组件用得不多的项目无需任何插件改几行 import 即可。核心思路不从头文件引入而是直接指向es目录下的具体组件并单独引入该组件的样式。import Input from formik-antd/es/input import formik-antd/es/input/style每引入一个组件就只打包这一个组件及其 antd 依赖。样式方面src/input/style/index.tsx 内部实际引入的是 antd 对应组件的样式而非antd/dist/antd.css全量样式从 src/input/style/css.tsx 可以看到它精确指向antd/lib/input/style/css.js。每个组件目录如src/select/style/、src/form/style/都遵循同样的结构。✅效果代码 样式双按需适合小型项目快速瘦身。三、方法二babel-plugin-import 自动按需加载最高效组件多起来后手动写路径太繁琐。Ant Design 官方的babel-plugin-import插件可以在编译时自动把import { Input } from formik-antd重写成import Input from formik-antd/es/input连样式也自动带出来。安装插件及 CRA 项目的配置工具npm install babel-plugin-import customize-cra react-app-rewired --save-dev在config-overrides.js中同时为antd 和 formik-antd两个库开启按需加载const { override, fixBabelImports } require(customize-cra) module.exports override( fixBabelImports(antd, { libraryName: antd, libraryDirectory: es, style: css, }), fixBabelImports(formik-antd, { libraryName: formik-antd, libraryDirectory: es, style: css, }), )然后把package.json脚本里的react-scripts换成react-app-rewired。⚠️ 注意CRA 官方不支持修改 webpack 配置遇到问题需要自行排查。✅效果代码零改动成本按需逻辑交给编译期自动完成是组件较多项目的推荐方案。四、方法三开启 webpack Tree Shaking零配置兜底如果你的项目已经在用 webpack 5或支持sideEffects字段的构建工具只要满足两个条件Tree Shaking 会自动剔除 formik-antd 中未使用的组件从es目录加载webpack 优先走module字段指向的 es/index.js拿到的是 ES Module 代码sideEffects 白名单生效由于 package.json 已声明只有style目录有副作用未使用的组件代码会被自动移除。最佳实践方法三负责摇掉 formik-antd 自身代码但 formik-antd 内部从 antd 入口引入组件要连 antd 一起摇干净建议方法三 方法二组合使用对 antd 也配置babel-plugin-import实现打包体积的最小化。五、验证瘦身效果3 步检查清单优化后如何确认真的变小了① 看构建产物执行npm run build对比优化前后build/static/js下主文件的 gzip 体积② 用可视化分析工具在构建报告中搜索antd确认只包含你实际使用的组件如input、form而不是button、menu等无关组件③ 检查样式文件确认没有antd.css全量样式只有各组件对应的独立样式文件。六、常见问题 FAQQ1只用了 3 个组件推荐哪种方案直接上方法一手动按需加载最直观还能避免引入插件带来的配置风险。Q2Tree Shaking 对样式也有效吗不会。样式文件被sideEffects标记为有副作用是故意保留的。样式需要靠按需引入es/组件/style来精简而不是摇树。Q3为什么有人优化后体积反而变大通常是全量引入了antd/dist/antd.css。请改用组件级样式引入这是体积大头之一。Q4v1antd 3和 v2antd 4的按需方式一样吗一样。按需路径、sideEffects 配置和插件方案在两个大版本中机制相同版本对应关系见 package.json 的 peerDependencies 范围。七、总结一张表选对方案方案上手难度适用场景精简效果手动按需加载⭐小型项目、组件少高babel-plugin-import⭐⭐中大型项目、组件多最高Tree Shakingwebpack 5⭐现代构建工具兜底中建议搭配方法二formik-antd 本身是零依赖 双构建 sideEffects 白名单的瘦身友好型库按需加载与 Tree Shaking 的每一步优化都能直接体现在打包体积上。现在就可以动手先检查你的 import 方式再挑一个方案试跑一次构建瘦身效果立竿见影。【免费下载链接】formik-antdSimple declarative bindings for Ant Design and Formik.项目地址: https://gitcode.com/gh_mirrors/fo/formik-antd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考