首页
/ Framer Motion 非 React 项目中的依赖问题解析

Framer Motion 非 React 项目中的依赖问题解析

2025-05-06 12:58:00作者:董灵辛Dennis

问题背景

Framer Motion 是一个流行的动画库,最初为 React 设计,但后来也提供了对非 React 项目的支持。在版本 11.3.0 之后,用户报告了一个重要问题:即使在没有 React 的项目中(如 Vue.js),Framer Motion 也开始强制要求安装 React 依赖。

问题表现

当开发者尝试在非 React 项目中使用 Framer Motion 的 DOM 功能时,会遇到以下错误提示:

Error: Could not resolve "react" imported by "framer-motion". Is it installed?

这个问题在 11.2.14 及以下版本中并不存在,表明这是 11.3.0 版本引入的回归性问题。

技术分析

通过代码追踪,我们发现问题的根源在于依赖链:

  1. dom-entry 模块导入 animate
  2. animate 导入 animateTarget
  3. animateTarget 使用 addValueToWillChange 函数
  4. addValueToWillChange 来自 11.3.0 新增的 add-will-change 模块
  5. add-will-change 导入 WillChangeMotionValue
  6. WillChangeMotionValue 导入 useConstant
  7. useConstant 最终从 react 导入 useRef

这个依赖链表明,虽然 React 被标记为可选依赖,但代码实现中却存在硬性依赖。

解决方案

Framer Motion 团队在 11.3.11 版本中修复了这个问题。修复的关键点包括:

  1. 重构了 add-will-change 模块的实现
  2. 移除了对 React 相关功能的非必要依赖
  3. 确保核心动画功能可以在纯 JavaScript 环境中运行

对于使用 Motion 包(非 React 版本)的用户,团队在 12.0.11 版本中也解决了类似问题,通过调整 Rollup 配置确保 React 依赖被正确处理。

开发者建议

  1. 对于非 React 项目,建议使用最新版本的 Framer Motion
  2. 如果遇到类似依赖问题,可以检查依赖链中是否存在意外的 React 引用
  3. 在构建配置中,可以尝试将 React 标记为外部依赖(external)
  4. 关注官方更新日志,特别是关于依赖关系的变更说明

总结

这个案例展示了现代前端开发中一个常见挑战:如何在保持功能完整性的同时,确保模块间的依赖关系清晰且合理。Framer Motion 团队通过快速响应和代码重构,成功解决了这个问题,为跨框架动画解决方案提供了更好的支持。

登录后查看全文
热门项目推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
858
511
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
258
298
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
kernelkernel
deepin linux kernel
C
22
5