
Farm
基于 Rust 编写的极速 Web 构建工具,兼容 Vite 生态,提供毫秒级冷启动和 HMR 体验。
Farm 是使用 Rust 编写的下一代 Web 构建引擎,兼容 Vite 插件生态,通过多线程并行编译和模块级持久缓存实现极致构建性能,适合超大型项目和 Monorepo。
Farm
基于 Rust 编写的极速 Web 构建工具,兼容 Vite 生态,提供毫秒级冷启动和 HMR 体验。
技术简介说明
Farm 是一个使用 Rust 编写的下一代 Web 构建引擎,旨在为 Web 开发和 JavaScript 库构建提供极致的构建性能。它的诞生源于前端工程规模不断扩大所带来的构建瓶颈——传统的 Webpack 和早期的 Vite 在超大型项目中逐渐暴露出冷启动慢、HMR 延迟高、CI/CD 构建耗时过长等问题。Farm 通过 Rust 的多线程并行编译能力和模块级持久缓存机制,将构建性能提升到了一个新的量级。
Farm 的核心定位是成为 Vite 的高性能替代品,而非完全另起炉灶。它在保持 Vite 兼容性的同时,通过 Rust 实现的编译核心来大幅缩短构建时间。Farm 并不是简单地将 Vite 的 JavaScript 实现替换为 Rust,而是重新设计了构建流程中的关键环节——包括模块解析、转换、打包和资源处理,使得每个环节都能充分利用 Rust 的性能优势。
Farm 的核心价值在于为超大型前端项目(特别是 monorepo)提供可持续的构建效率。当一个项目的模块数达到数千甚至上万时,Farm 相比 Vite 的优势更加明显——冷启动可快 10 倍,HMR 响应时间控制在 20ms 以内,生产构建时间可缩短 80% 以上。这些性能提升对于需要频繁部署的大型团队来说,意味着显著的 CI/CD 成本节约和开发效率提升。
基本信息
| 项目 | 详情 |
|---|---|
| 官网 | https://farmfe.org |
| GitHub | https://github.com/farm-fe/farm |
| License | MIT |
| 最新版本 | v1.0.0(稳定版)/ v0.0.22-nightly(每日构建) |
| 主要维护者/公司 | FarmFE 社区(核心贡献者:brightwu 等) |
| 语言构成 | Rust 66.9%、TypeScript 15.9%、MDX 8.0%、JavaScript 5.5% |
| Node.js 要求 | >= 16.18.0 |
| Stars | 5.6k+ |
| 首次发布 | 2023 年 |
| v1.0 发布日期 | 2024 年 4 月 |
快速上手
安装
使用脚手架工具创建新项目:
# npm
npm create farm@latest
# yarn
yarn create farm@latest
# pnpm
pnpm create farm@latest指定项目名和模板:
npm create farm farm-app --template react
# 可用模板:react、vue、solid、svelte 等进入项目并启动:
cd farm-app
npm install
npm start
# 默认开发服务器端口:9000基础配置(farm.config.ts 示例)
import { defineConfig } from '@farmfe/core'
export default defineConfig({
compilation: {
input: {
index: './index.html',
},
output: {
path: './build',
publicPath: '/',
targetEnv: 'browser',
},
// 生产构建优化
minify: true,
treeShaking: true,
// 语法降级目标
target: 'es2017',
// 持久缓存配置
persistentCache: true,
},
server: {
port: 9000,
open: true,
},
plugins: [
// 官方 React 插件
'@farmfe/plugin-react',
// 官方 Sass 插件
'@farmfe/plugin-sass',
],
})最小示例
farm-demo/
├── index.html
├── src/
│ ├── main.ts
│ └── App.tsx
├── farm.config.ts
└── package.json
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Farm Demo</title>
</head>
<body>
<div id="root"></div>
<script src="./src/main.ts"></script>
</body>
</html>src/main.ts
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
</React.StrictMode>
)src/App.tsx
export default function App() {
return <h1>Hello, Farm!</h1>
}farm.config.ts
import { defineConfig } from '@farmfe/core'
export default defineConfig({
compilation: {
input: { index: './index.html' },
output: { path: './build', publicPath: '/' },
},
plugins: ['@farmfe/plugin-react'],
})package.json
{
"scripts": {
"start": "farm start",
"build": "farm build",
"preview": "farm preview"
},
"devDependencies": {
"@farmfe/cli": "latest",
"@farmfe/core": "latest",
"@farmfe/plugin-react": "latest",
"react": "^18",
"react-dom": "^18"
}
}核心概念与架构
Rust 编译核心
Farm 的核心编译引擎完全使用 Rust 编写,利用 Rust 的零成本抽象和多线程并行能力来处理模块解析、转换和打包。每个模块的编译任务可以被分配到多个线程同时执行,充分利用现代多核 CPU 的性能。通过 NAPI-RS 实现 Node.js 绑定,使得 JavaScript 生态可以无缝调用 Rust 编译能力。
插件系统
Farm 采用完全插件化的架构设计,所有的资源处理都通过插件实现:
- Rust 插件:性能最高,适合需要深度编译优化的场景,通过 NAPI-RS 与 JS 层通信
- JavaScript 插件:灵活易用,支持 Vite/Rollup 插件生态的直接复用
- SWC 插件:利用 SWC 生态实现代码转换和压缩
- Runtime 插件:扩展 Farm 运行时行为
- Server 插件:扩展开发服务器功能
并行编译
Farm 的编译管线天然支持并行处理:
- 模块解析阶段:多个模块的依赖树可以并行遍历
- 转换阶段:独立的模块可以并行使用 SWC 进行转换
- 打包阶段:不同的 chunk 可以并行生成
- 资源处理阶段:CSS、图片等静态资源可以并行处理
增量构建与持久缓存
Farm 采用模块级别的持久缓存机制,缓存数据存储在 node_modules/.farm 目录中:
- 首次构建后,每个已编译模块的内容哈希会被缓存
- 后续构建时,只有内容发生变化的模块才需要重新编译
- 缓存是跨进程持久的,重启开发服务器或 CI 缓存命中后依然有效
- 启用缓存后,冷启动时间可降低 75%,构建时间可降低 84%
Partial Bundling(部分打包)
Farm 采用独特的"部分打包"策略,介于全量打包(Webpack)和不打包(Vite dev mode)之间:
- 将数千个依赖模块打包成 20-30 个输出文件
- 平衡加载性能和缓存粒度
- 避免 Vite 模式下大量模块请求导致浏览器崩溃的问题
- 确保开发环境和生产环境的构建产物一致性
Lazy Compilation(懒编译)
动态导入的模块不会在启动时立即编译,而是推迟到用户实际导航到对应页面时才触发编译。这大幅减少了大型项目的启动时间,因为初始编译只需要处理入口及其直接依赖。
核心特性
- 极致构建性能:1000 个 React 组件的项目中,比 Webpack 快 20 倍,比 Vite 快 10 倍;HMR 更新在 20ms 内完成
- 模块级持久缓存:基于内容哈希的磁盘缓存,未变更模块永不重复编译,缓存跨进程持久化
- 部分打包策略:智能将模块分组为 20-30 个文件,兼顾加载性能与缓存复用率
- 懒编译:动态导入模块延迟编译,仅在用户实际访问时触发
- Vite 插件兼容:通过转换层直接运行大部分 Vite/Rollup 插件,复用现有生态
- 全语言原生支持:无需额外配置即可处理 HTML、CSS/CSS Modules、JS/TS/JSX/TSX、JSON 和静态资源
- 开发/生产一致性:开发和生产环境使用相同的编译管线,消除环境差异导致的诡异 bug
- Tree Shaking & Minification:原生支持生产环境代码优化,默认目标 ES2017,可配置 ES5
- SSR 支持:为 React、Vue、Solid 等框架提供 Server-Side Rendering 配置
- 多浏览器兼容:同时支持现代浏览器和旧版(ES5)浏览器目标
生态图
官方插件
| 插件 | 说明 |
|---|---|
@farmfe/plugin-react | React JSX 转换与 Fast Refresh |
@farmfe/plugin-vue | Vue SFC 编译支持 |
@farmfe/plugin-sass | Sass/SCSS 编译 |
@farmfe/plugin-less | Less 编译 |
@farmfe/plugin-postcss | PostCSS 处理 |
@farmfe/plugin-solid | SolidJS JSX 转换 |
框架支持
- React:完整的 JSX/TSX 支持,Fast Refresh,SSR
- Vue:SFC 单文件组件支持,SSR
- Solid:JSX 编译支持,SSR
- Svelte:基础支持
兼容生态
- Vite 插件:通过兼容层直接使用大部分 Vite 插件
- Rollup 插件:Rollup 风格插件系统,兼容 Rollup 生态
- Unplugin:支持 Unplugin 规范,复用跨构建工具插件
- SWC 插件:支持 SWC 插件进行代码转换
社区资源
- Awesome Farm:社区维护的插件和示例集合
- Discord:官方英文社区频道
- WeChat:中文社区微信群
- Twitter/X:官方动态更新
适用场景
- 超大型 Monorepo:当项目模块数超过数千个,Webpack/Vite 构建时间超过 30 秒时,Farm 的性能优势最为显著
- 高频部署的 CI/CD 环境:构建时间的缩短直接转化为 CI/CD 成本节约,持久缓存可充分利用 CI 缓存机制
- 多框架共存的企业级项目:需要同时支持 React、Vue 等不同框架的项目,Farm 提供统一的构建引擎
- 需要极致 HMR 体验的大型 SPA:HMR 延迟控制在 20ms 以内,确保大型应用中修改后的即时反馈
- 跨环境一致性要求严格的项目:开发/生产环境使用相同编译管线,避免"在我机器上好好的"问题
- 需要兼容旧浏览器的现代开发:原生支持语法降级到 ES5,无需额外配置 Babel
- 对构建工具性能有极致追求的团队:愿意尝试新工具以获得数倍性能提升的技术前沿团队
开发与工程化
开发流程
# 启动开发服务器(默认端口 9000)
farm start
# 构建生产版本
farm build
# 本地预览生产构建
farm preview
# 类型检查(配合 TypeScript)
farm check构建部署
# 构建生产版本
npm run build
# 输出目录:./build(可在配置中自定义)
# 构建时会进行:
# 1. Tree Shaking - 移除未使用代码
# 2. Minification - 代码压缩
# 3. 语法降级 - 默认目标 ES2017
# 4. 资源指纹 - 文件名包含 content hash
# 5. CSS 提取 - 独立的 CSS 文件环境变量
Farm 支持通过 .env 文件管理环境变量:
# .env
FARM_APP_TITLE=My App
FARM_APP_API_URL=https://api.example.com
# .env.development
FARM_APP_DEBUG=true
# .env.production
FARM_APP_API_URL=https://api.prod.example.com在代码中使用:
const title = process.env.FARM_APP_TITLE路径别名
// farm.config.ts
export default defineConfig({
compilation: {
resolve: {
alias: {
'@': './src',
'@components': './src/components',
'@utils': './src/utils',
},
},
},
})代理配置
// farm.config.ts
export default defineConfig({
server: {
proxy: {
'/api': {
target: 'http://localhost:3000',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
},
},
})性能与安全
性能特点
基准测试数据(1000 个 React 组件项目)
| 指标 | Farm | Vite | Webpack |
|---|---|---|---|
| 冷启动 | ~500ms | ~5s | ~10s |
| HMR | <20ms | ~120ms | ~500ms |
| 生产构建(无缓存) | ~3.1s | ~18s | ~60s+ |
| 生产构建(含压缩) | ~4.2s | ~28s | ~90s+ |
| 缓存命中后冷启动 | ~125ms | - | - |
| 缓存命中后构建 | ~0.7s | - | - |
性能优化建议
- 启用持久缓存:
persistentCache: true确保模块级缓存生效 - 合理使用懒编译:大型项目中充分利用动态 import 实现按需编译
- 配置正确的 target:根据目标浏览器设置合理的语法降级级别,避免不必要的转换
- 优化插件加载:优先使用 Rust 插件,减少 JS 插件的开销
- 控制模块粒度:合理的代码分割有助于 Farm 的 Partial Bundling 策略发挥最大效果
安全特性
- 依赖锁定:通过 lock 文件确保构建的可重复性
- 内容哈希:输出文件名包含内容哈希,支持缓存失效策略
- 环境变量隔离:仅
FARM_前缀的环境变量会暴露给客户端代码 - 沙箱隔离:开发服务器在独立进程中运行
- 插件权限控制:插件系统对文件系统访问有明确的边界
技术对比
Farm vs Vite
| 维度 | Farm | Vite |
|---|---|---|
| 核心语言 | Rust | JavaScript + Go (esbuild) + Rust (Rolldown) |
| 开发模式 | 自有编译格式(非原生 ESM) | 原生浏览器 ESM |
| 构建性能 | 极快(10x Vite 大型项目) | 快(大型项目渐慢) |
| HMR 速度 | <20ms | ~120ms |
| 缓存策略 | 模块级持久磁盘缓存 | 依赖预构建 + 浏览器缓存 |
| 插件生态 | 兼容 Vite 插件(~80-90%) | 最丰富、最成熟 |
| 生产稳定性 | v1.0,社区增长中 | 5 年生产验证,事实标准 |
| 适用场景 | 超大项目、monorepo | 绝大多数项目的首选 |
Farm vs Rspack
| 维度 | Farm | Rspack |
|---|---|---|
| 核心语言 | Rust | Rust |
| 定位 | Vite 兼容替代品 | Webpack 兼容替代品 |
| Webpack 兼容性 | 无 | 高度兼容 |
| Vite 兼容性 | 核心设计目标 | 有限支持 |
| 迁移成本 | 新项目友好,迁移需调整 | 现有 Webpack 项目可低成本迁移 |
| 背后团队 | 社区驱动 | ByteDance |
| 成熟度 | v1.0,生态成长中 | 生产可用,生态较完善 |
Farm vs Rolldown
| 维度 | Farm | Rolldown |
|---|---|---|
| 核心语言 | Rust | Rust |
| 定位 | 独立构建工具 | Vite 内部的打包引擎 |
| 独立性 | 完整的独立工具链 | 作为 Vite 的一部分使用 |
| Rollup 兼容性 | ~90% | ~90%(Vite 6 中) |
| 大型项目性能 | 极快 | 极快 |
| 生态整合 | 需要独立配置 | 无缝集成到 Vite 生态 |
| 状态 | 生产可用 | 实验性(预计未来 Vite 默认) |
Farm vs Turbopack
| 维度 | Farm | Turbopack |
|---|---|---|
| 核心语言 | Rust | Rust |
| 定位 | Vite 兼容 | Next.js 专用 |
| 开源状态 | 完全开源 | 部分开源 |
| 框架绑定 | 框架无关 | 深度绑定 Next.js |
| 增量构建 | 模块级持久缓存 | 增量编译 |
| 适用范围 | 通用 Web 项目 | Next.js 项目 |
综合选型建议
| 场景 | 推荐工具 |
|---|---|
| 新项目,模块数 < 1000 | Vite(生态最成熟) |
| 超大型 monorepo,构建 > 30s | Farm(性能优势最大) |
| 现有 Webpack 项目迁移 | Rspack(兼容成本最低) |
| Next.js 项目 | Turbopack(原生集成) |
| 等待未来标准方案 | Vite + Rolldown(Vite 7 默认) |
| 高频 CI/CD 的大型团队 | Farm(CI 缓存收益最高) |
最佳实践
生产环境配置
import { defineConfig } from '@farmfe/core'
export default defineConfig({
compilation: {
input: {
index: './index.html',
},
output: {
path: './dist',
publicPath: '/',
// 资源文件名包含 content hash
filename: '[name].[contentHash:8][ext]',
// 目标环境
targetEnv: 'browser',
},
// 生产优化
minify: true,
treeShaking: true,
// 语法目标
target: 'es2017',
// 持久缓存
persistentCache: true,
// 代码分割
partialBundling: {
targetConcurrentRequests: 20,
targetMinSize: 20 * 1024, // 20KB
targetMaxSize: 1500 * 1024, // 1500KB
},
},
plugins: [
'@farmfe/plugin-react',
],
})CI/CD 优化
# GitHub Actions 示例
name: Build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- uses: pnpm/action-setup@v2
# 利用 Farm 持久缓存
- name: Restore Farm Cache
uses: actions/cache@v4
with:
path: node_modules/.farm
key: farm-cache-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
farm-cache-
- run: pnpm install
- run: pnpm build大型项目优化策略
- 合理划分动态导入边界:将路由级别的组件通过
import()动态导入,配合懒编译减少初始编译量 - 利用持久缓存:确保
node_modules/.farm目录在 CI 中被缓存,可大幅减少重复构建时间 - 选择 Rust 插件:在性能敏感的环节优先使用 Rust 实现的插件
- 控制第三方依赖体积:定期检查并移除未使用的依赖,减少编译总量
- 渐进式迁移:对于从 Vite 迁移的项目,可以先替换构建命令,逐步调整插件配置
调试技巧
# 启用详细日志
FARM_LOG_LEVEL=debug farm start
# 查看编译性能数据
FARM_PROFILE=1 farm build
# 检查缓存命中情况
FARM_CACHE_STATS=1 farm build技术局限与边界
已知限制
- Vite 插件兼容性不完美:虽然支持大部分 Vite 插件,但依赖 Vite 内部 hook 的复杂插件可能无法正常工作,需要逐一验证
- 生态成熟度差距:相比 Vite 5 年多的生产验证,Farm v1.0 刚发布不久,社区案例和最佳实践相对较少
- 文档完善度:部分高级配置和 API 文档可能不够详尽,需要参考源码或源码中的测试用例
- 社区规模:社区和贡献者规模相比 Vite/Webpack 仍然较小,遇到问题时获取帮助的渠道相对有限
- 框架支持深度:对 React、Vue 的支持较为完善,但对 Svelte、Solid 等框架的支持可能不如 Vite 生态中的专用工具成熟
- 开发模式差异:Farm 开发模式下使用自有编译格式而非原生 ESM,这意味着一些依赖原生 ESM 行为的调试工具可能不兼容
- Windows 兼容性:Rust 编译的 native 模块在 Windows 上偶尔需要额外的环境配置
生态成熟度评估
| 维度 | 评估 |
|---|---|
| 核心稳定性 | ★★★★☆ (v1.0 发布,核心功能稳定) |
| 插件生态 | ★★★☆☆ (兼容 Vite 插件但自有插件有限) |
| 文档完善度 | ★★★☆☆ (基础文档齐全,高级用法需补充) |
| 社区活跃度 | ★★★☆☆ (GitHub 5.6k stars,社区增长中) |
| 生产验证 | ★★★☆☆ (v1.0 后逐步增加生产案例) |
| 框架集成 | ★★★★☆ (React/Vue 支持良好) |
| 企业采用 | ★★☆☆☆ (大规模采用案例有限) |
迁移风险评估
- 低风险:全新项目,无历史包袱,团队愿意接受新工具
- 中风险:从 Vite 迁移,插件依赖较少,有充足测试覆盖
- 高风险:大量自定义 Webpack 插件、复杂的多入口配置、深度依赖 Vite 内部 API 的项目
学习资源
官方资源
- 官方文档:https://farmfe.org/docs
- GitHub 仓库:https://github.com/farm-fe/farm
- Why Farm:https://farmfe.org/docs/why-farm
- 配置指南:https://farmfe.org/docs/configuring-farm
- 插件 API:https://farmfe.org/docs/plugins/using-plugins
- Rust 插件 API:https://farmfe.org/docs/plugins/rust-plugin-api
- Awesome Farm:https://github.com/farm-fe/awesome-farm
社区资源
- Discord 社区:https://discord.gg/XncpPr7r
- 知乎专栏:搜索 "Farm 构建工具" 获取中文技术文章
- 掘金社区:Frontend 板块有 Farm 相关的技术分享
- GitHub Discussions:https://github.com/farm-fe/farm/discussions
入门教程
- 官方 Quick Start(5 分钟上手)
- GitHub 仓库中的 examples 目录(React/Vue/Solid 示例)
- 《比 Vite 快 5 倍?2ms HMR?Farm:基于 Rust 的极速构建引擎》— 知乎
- Hacker News 社区讨论帖 — 了解社区反馈和实际使用体验
进阶阅读
- Farm Partial Bundling 策略源码分析
- Farm 持久缓存机制设计文档
- Rust Plugin 开发指南
- 从 Vite 迁移到 Farm 的实战记录
2026 年现状
版本状态
- 稳定版:v1.0.0(2024 年 4 月发布)标志着 Farm 进入生产可用阶段
- Nightly 构建:持续发布每日构建版本(最新为 2025 年 8 月版本),保持活跃的开发节奏
- GitHub 指标:5.6k+ Stars、191 Forks、1,268 Commits、1,097 Releases
发展趋势
- Vite 插件兼容性持续提升:从 v0.13 开始支持 Vite 插件,后续版本不断完善兼容层
- 性能持续优化:每次迭代都在冷启动、HMR、构建速度上有所改进
- 生态扩展:更多官方和社区插件加入,框架支持更加完善
- 社区增长:GitHub stars 持续增长,Discord 和微信群活跃度提升
行业定位(2026 视角)
根据 PkgPulse 2026 年的评测,Rust 构建工具的格局如下:
- Vite 仍然是 99% 团队的推荐选择——生态最成熟、社区最大、文档最全
- Farm 适合管理超大型 monorepo 的团队,当 CI 构建时间超过 30 秒时,Farm 的性能优势能带来实实在在的成本节约
- Rolldown 作为 Vite 未来的内置打包引擎,预计在 Vite 的下一个大版本中成为默认选项
值得关注的发展方向
- Vite 是否会集成 Rolldown 并缩小与 Farm 的性能差距
- Farm 的 Vite 插件兼容层能否覆盖更多复杂插件场景
- 社区是否会涌现更多大型企业采用案例
- 是否会有更多框架(如 Astro、Qwik)提供 Farm 官方集成
总结评价
Farm 是当前 Rust 构建工具赛道中最有竞争力的 Vite 兼容替代方案。它的核心价值在超大型项目中得到了充分验证——10 倍于 Vite 的构建速度不是纸面数据,而是实际基准测试的结果。然而,生态成熟度和社区规模仍然是它的短板。对于 2026 年的团队来说,如果你的项目构建时间已经成为痛点,Farm 值得认真评估;如果你的项目在 Vite 下表现良好,则没有迫切的迁移必要。