项目概览

属性详情
名称fallow
GitHubfallow-rs/fallow
Stars392 ⭐
语言Rust
许可证MIT
定位TypeScript/JavaScript 代码质量分析工具

为什么需要 fallow?

前端项目随着业务发展,代码库往往会积累各种”技术债”:

  • 僵尸代码:函数和变量定义了却从未使用,文件越堆越大
  • 复制粘贴:同样的逻辑散落在十几个文件里,一改就漏
  • 循环依赖:模块 A 依赖 B,B 又依赖 A,编译时提心吊胆
  • 复杂度爆炸:单个函数几百行,接手的人不敢动

传统的 ESLint 能发现语法问题,但对这类”架构级”问题无能为力。fallow 的目标就是填补这个空白。

核心功能

1. 未使用代码检测

扫描整个项目的导出和引用关系,找出那些”存在但没人用”的代码:

fallow --unused

输出示例:

⚠️  Unused exports found:
   - src/utils/helpers.ts: formatDate()
   - src/components/LegacyButton.tsx (entire file)
   - src/api/types.ts: UserResponse interface

2. 重复代码识别

不只是简单的字符串对比,fallow 会分析代码的语义结构,发现那些”改了变量名但逻辑一样”的复制粘贴:

fallow --duplicates

3. 循环依赖检测

可视化展示模块间的依赖关系,帮你定位循环引用的源头:

fallow --circular

4. 复杂度热点分析

基于圈复杂度和认知复杂度,找出最需要重构的函数:

fallow --complexity

为什么选择 Rust?

fallow 用 Rust 编写,相比同类 JavaScript 工具有明显性能优势:

场景fallow (Rust)传统 JS 工具
10万行代码项目~2秒~15秒
100万行代码项目~20秒数分钟或内存溢出
内存占用~100MB~500MB+

对于大型 monorepo,这种性能差异直接决定了工具是否可用。

使用方式

安装

# 通过 npm 安装(预编译二进制)
npm install -g fallow

# 或通过 cargo 从源码编译
cargo install fallow

基础用法

# 扫描整个项目
fallow

# 只检查特定目录
fallow src/components

# 输出 JSON 格式供 CI 使用
fallow --format json > report.json

# 忽略测试文件
fallow --ignore "**/*.test.ts"

CI 集成

在 GitHub Actions 中使用:

- name: Check code quality
  run: |
    npx fallow --unused --fail-on-found

项目状态

指标数据
Stars392
Forks10
创建时间2026年3月
最后更新2026年4月(活跃开发中)
主要依赖OXC(Rust 编写的 JavaScript 编译器)

同类工具对比

工具语言未使用代码重复代码循环依赖性能
fallowRust极高
KnipTypeScript中等
jscpdJavaScript中等
MadgeJavaScript较慢

fallow 的优势在于”一站式”解决所有代码质量问题,且性能足够处理大型项目。

注意事项

  • 项目较新(2026年3月创建),API 可能变化
  • 某些功能还在开发中(如 Vue/Svelte 单文件组件支持)
  • 需要 Node.js 18+ 运行环境

总结

如果你正在维护一个历史较长的 TypeScript 项目,或者想在新项目启动时就建立代码质量门槛,fallow 值得一试。它的 Rust 内核提供了同类工具难以匹敌的性能,而功能覆盖面也足够应对大多数代码清理场景。


相关链接