ethers.js vs web3.js vs viem vs wagmi
1. 核心定位与层级关系
四者分属不同层级,服务于以太坊 Web3 前端开发的不同需求:
| 库 | 定位 | 层级 | 核心价值 |
|---|---|---|---|
| ethers.js | 以太坊 JavaScript 库 | 底层 | 提供与以太坊交互的核心功能 |
| web3.js | 以太坊 JavaScript 库 | 底层 | 以太坊基金会官方维护的全功能库 |
| viem | 以太坊 JavaScript 库 | 底层 | 现代、轻量的以太坊交互库 |
| wagmi | React Hooks 工具库 | 上层 | 基于底层库封装的前端开发工具 |
2. 详细功能对比
(1)ethers.js
- 核心功能:
- 钱包管理(生成、导入、签名交易)
- 智能合约交互(部署、调用、监听事件)
- 网络连接(与以太坊节点通信)
- 以太坊数据解析(地址、交易、区块等)
- 特点:
- 轻量级(体积小,按需引入)
- API 现代(使用 Promise,支持 async/await)
- TypeScript 友好
- 文档清晰,社区活跃
- 使用场景:
- 需要直接与以太坊区块链交互的项目
- 对包体积敏感的应用
- 追求现代 API 设计的开发者
(2)web3.js
- 核心功能:
- 与 ethers.js 类似,提供全面的以太坊交互功能
- 支持更多底层 RPC 方法
- 内置更多工具函数
- 特点:
- 功能全面(官方维护,覆盖所有以太坊功能)
- 相对较重(包体积大)
- API 设计较传统(早期版本使用回调,新版支持 Promise)
- 历史悠久,生态成熟
- 使用场景:
- 需要使用官方全功能实现的项目
- 传统 Web3 项目迁移
- 对官方支持有强依赖的场景
(3)viem
- 核心功能:
- 与 ethers.js 类似,提供以太坊交互的核心功能
- 支持 EIP-1193 钱包标准
- 内置链数据和地址工具
- 特点:
- 极致轻量(体积比 ethers.js 更小)
- 性能优化(更快的交易签名和网络请求)
- 现代 API 设计(链式调用,类型安全)
- 专注于前端使用场景
- 使用场景:
- 对包体积和性能要求极高的项目
- 现代前端框架(如 React 18+)
- 追求最新技术栈的开发者
(4)wagmi
- 核心功能:
- 基于 React Hooks 的以太坊交互封装
- 钱包连接与管理(支持多种钱包)
- 智能合约调用的 Hook 化(如
useContractRead) - 交易发送与状态管理
- 与
@tanstack/react-query集成,提供数据缓存
- 特点:
- 前端开发友好(Hooks 化 API)
- 支持多底层库(默认支持 viem,可选 ethers.js)
- 与现代前端生态集成(React、TypeScript)
- 配置灵活,扩展性强
- 使用场景:
- React 前端 Web3 项目
- 需要快速实现钱包连接、合约交互的场景
- 追求开发效率和代码简洁的项目
3. 联系与依赖关系
底层库之间的关系:
ethers.js、web3.js、viem均为底层以太坊交互库,功能重叠但设计理念和性能不同viem是较新的库,针对前端场景优化,体积和性能优于传统库
wagmi 与底层库的关系:
- wagmi v1+ 默认使用
viem作为底层库(替代之前的 ethers.js) - 仍支持通过配置使用
ethers.js(兼容性考虑) - wagmi 将底层库的复杂逻辑封装为简洁的 React Hooks
- wagmi v1+ 默认使用
功能互补:
- 底层库(ethers.js/web3.js/viem)负责与区块链交互的核心逻辑
- 上层库(wagmi)简化前端开发,提供 Hooks 化 API 和状态管理
生态组合:
- 现代 Web3 前端开发的主流组合:
viem + wagmi + RainbowKit(或其他钱包连接库) - 传统组合:
ethers.js/web3.js + 自定义钱包连接逻辑
- 现代 Web3 前端开发的主流组合:
4. 技术演进与选择建议
技术趋势:
- 从
web3.js到ethers.js:追求更现代、轻量的 API - 从
ethers.js到viem:进一步优化性能和体积 - 从直接使用底层库到
wagmi:提升前端开发效率
- 从
选择建议:
- 现代前端项目:推荐使用
viem + wagmi组合- 优势:极致轻量、性能优异、开发效率高
- 需要兼容性:选择
ethers.js + wagmi- 优势:生态成熟、文档丰富、社区支持广
- 传统项目:继续使用
web3.js- 优势:官方维护、功能全面、历史兼容性好
- 底层定制需求:直接使用
viem或ethers.js- 优势:灵活性高,可按需实现特定功能
- 现代前端项目:推荐使用
5. 总结
- 底层库(ethers.js/web3.js/viem):负责与以太坊区块链交互的核心逻辑,选择依据为性能、体积和 API 偏好
- 上层库(wagmi):简化前端开发,提供 Hooks 化 API 和状态管理,大幅提升开发效率
- 最佳实践:现代项目优先选择
viem + wagmi组合,兼顾性能和开发体验
这种分层设计反映了 Web3 前端开发的演进趋势:从复杂的底层操作到简洁的上层抽象,从单一功能库到系统化的生态工具链。
ethers.js vs web3.js vs viem vs wagmi
https://bitgarden.cn/2023/02/03/Web3/ethereum-libraries-comparison/