我的项目马上要 3k star 啦 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
j0hnj
V2EX    分享创造

我的项目马上要 3k star 啦

  •  
  •   j0hnj 7 天前 1623 次点击

    TLDR: prek 是用 Rust 重写的 pre-commit 工具,支持自动管理多种语言编写的 hook ,欢迎大家 star: https://github.com/j178/prek

    距离第一次发帖 airflow 正在迁移到我写的 pre-commit 替代品 已经过去 4 个月了,这段时间 prek 经历了很多不可思议的「第一次」,今天想和大家更新一下项目的最新进展。

    功能完善

    这几个月主要专注于功能的完善和性能优化:

    核心功能

    • Mono repo 支持:完整支持了 monorepo 模式,每个子项目都可以有自己独立的 .pre-commit-config.yaml 配置文件,再也不用在根目录维护一个庞大的配置了
    • 多语言生态扩展:新增了对 Lua 、Ruby 、Rust 的完整支持,Deno 和 Dart 的支持也在开发中
    • 内置 hooks:支持了 repo: builtin 内置 hook ,开箱即用更方便

    性能与安全

    • 供应链安全:prek auto-update --cooldown-days 参数可以设置更新冷却期,避免依赖包被恶意篡改后立即自动更新带来的安全风险
    • 并行执行:支持 hook 级别的 priority 设置和并行执行,可以极大提升多 hook 场景下的执行速度

    社区认可

    让我最有成就感的是项目得到了社区的广泛认可:

    重量级用户

    Apache Airflow 深度集成了 prek ,还在官方系列文章里专门写了一篇介绍:Modern Python Monorepo for Apache Airflow - Part 3

    大佬推荐

    社区采用

    已经有不少知名项目迁移或正在迁移中:

    数据表现

    • GitHub Stars 即将突破 3000
    • 月下载量:1400 万
    • 总下载量:4200 万
    • PyPI 全站排名:第 889 位

    感想

    开源真的很有意思,你永远不知道下一个用户会是谁。那些曾经仰望的大佬,也会在你的项目里出现!

    如果你还在用 Python 版本的 pre-commit ,不妨试试 prek ,欢迎建议和反馈!

    项目地址: https://github.com/j178/prek

    9 条回复    2025-12-23 08:51:21 +08:00
    cryptovae
        1
    cryptovae  
       7 天前   1
    确实好强,上次看你发这个帖子时好像才 100 多个 star ,就在几个月前
    bxb100
        2
    bxb100  
       7 天前   1
    @cryptovae airflow 吃螃蟹后觉得顶呱呱, 然后社区对 pre-commit 作者早有不满, 最后成全了 prek 的一世英名
    j0hnj
        3
    j0hnj  
    OP
       7 天前
    @bxb100 感谢大佬贡献的 docker 和 docker_image 支持!
    bxb100
        4
    bxb100  
       7 天前
    @j0hnj 惭愧, 我就一混 PR 的
    Razio
        5
    Razio  
       7 天前   1
    我看文章里面写的 [Meet Jo, the creator of prek. What started as a weekend / hobby project]

    哥们,但我看你 github 明明都快全勤了,你太猛了,好强
    zqr10159
        6
    zqr10159  
       7 天前
    正好打算在我们项目里用,对这个不太了解啊,咨询一下楼主。我们项目仓库里是同时有前后端的代码,如何让所有克隆我们仓库的人在提交时必须运行 prek 来对前后端执行检查呢?前端是 angular 的,后端是 java ,麻烦楼主指点一下。https://github.com/apache/hertzbeat
    j0hnj
        7
    j0hnj  
    OP
       6 天前
    @zqr10159 首先需要在仓库中添加 `.pre-commit-config.yaml` 文件,并配置相应的检查 hook 。

    关于”如何强制所有克隆仓库的人在提交时运行 pre-commit 检查”,实际上无法做到强制要求。只有在开发者本地执行 `prek install` 安装 git hook 之后,提交时才会自动触发 prek 检查。

    推荐的最佳实践是:在 CI 流程中也添加 prek 检查步骤。这样当贡献者的 PR 触发 CI 检查失败时,他们会意识到需要在本地执行 `prek install`,以便在提交前就能快速发现并修复问题,而不是等到提交 PR 后才发现问题,提高开发效率。
    zqr10159
        8
    zqr10159  
       6 天前 via iPhone
    @j0hnj 好的感谢哈,之前用某个前端项目时候遇到了使用 husky 这种强制 git hooks 的项目来着,所以想问问有没有类似的
    zqr10159
        9
    zqr10159  
       6 天前
    @j0hnj https://github.com/rudikershaw/git-build-hook 搜了一下不知道这个能不能用
    关于     帮助文档     自助广系统     博客     API     FAQ     Solana     3732 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 45ms UTC 10:24 PVG 18:24 LAX 02:24 JFK 05:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86