【前端】garn:使用go实现一款类似yarn的依赖管理器

文章目录

背景

试试最新的编程助手kiro(amazon开发的),帮我们用go实现一款nodejs的依赖管理工具。功能上以yarn为样例,所以我称之为garn。

✨ 特性亮点

  • 🚀 高性能: 7.05秒安装97个包,接近Yarn性能
  • 💾 智能缓存: 100%缓存命中率,显著提升重复安装速度
  • 并发优化: Worker Pool架构,多线程并发下载
  • 🔗 部分兼容: 支持常用Yarn命令和package.json配置
  • 🌐 网络优化: HTTP/2支持,连接池复用,批量查询
  • 📊 实时进度: 友好的进度显示和状态反馈
  • 🛡️ 稳定可靠: 完整的错误处理和恢复机制

功能

功能 状态 测试命令样例 说明
基础命令
帮助信息 ✅ 完成 garn --help 显示所有可用命令和选项
版本信息 ✅ 完成 garn --version 显示 Garn 版本信息
配置仓库源 ✅ 完成 garn config set registry 更换npm源
包管理
安装所有依赖 ✅ 完成 garn install 根据 package.json 安装所有依赖,支持并行下载、进度显示、依赖解析
添加包 ✅ 完成 garn add lodash 添加新的依赖包,支持指定版本和 Scoped 包
移除包 ✅ 完成 garn remove lodash 从项目中移除依赖包
快速移除node_modules ✅ 完成 garn clean-modules 从项目快速删除node_modules依赖,类似rimraf
脚本执行
运行脚本 ✅ 完成 garn run buildgarn build 执行 package.json 中的脚本,支持直接执行和错误处理
文件管理
锁文件管理 ✅ 完成 garn install 生成和维护 garn.lock 确保可重现安装
版本管理
Semver 支持 ✅ 完成 garn add lodash@^4.0.0 支持语义化版本规范,版本范围匹配,Latest 版本
网络和缓存
NPM 注册表兼容 ✅ 完成 garn install 完全兼容 NPM 注册表,包完整性验证,Tarball 解压,网络错误处理
测试和质量
测试覆盖 ✅ 完成 go test ./... 单元测试,基准测试,集成测试
工作区支持 🔄 计划中 garn workspace Monorepo 工作区支持
兼容性
跨平台支持 ✅ 完成 所有命令 完全支持 Windows/Linux/macOS 平台,Node.js 兼容

性能测试

garn的依赖安装速度为yarn的1.1倍, 使用vite+vue3+element-plus项目进行测试

运行日志

复制代码
> ..\bin\garn install
Installing dependencies...
📖 Reading package.json...
📦 Installing 4 packages...
🔄 Resolving dependency tree...
✅ Resolved 100 packages (including dependencies)
⬇️  Downloading 100 packages...
📦 [  1%] encodeurl@2.0.0 (cached) (1/100)
📦 [  4%] forwarded@0.2.0 (cached) (4/100)
📦 [  2%] is-glob@4.0.3 (cached) (2/100)
📦 [  3%] safe-buffer@5.2.1 (cached) (3/100)
📦 [  5%] balanced-match@1.0.2 (cached) (5/100)
📦 [  6%] destroy@1.2.0 (cached) (6/100)
📦 [  7%] get-intrinsic@1.3.1 (cached) (7/100)
📦 [  8%] mime-db@1.52.0 (cached) (8/100)
📦 [  9%] etag@1.8.1 (cached) (9/100)
📦 [ 10%] ms@2.0.0 (cached) (10/100)
📦 [ 11%] ipaddr.js@1.9.1 (cached) (11/100)
📦 [ 12%] unpipe@1.0.0 (cached) (12/100)
📦 [ 13%] readdirp@3.6.0 (cached) (13/100)
📦 [ 14%] on-finished@2.4.1 (cached) (14/100)
📦 [ 15%] ee-first@1.1.1 (cached) (15/100)
📦 [ 16%] media-typer@0.3.0 (cached) (16/100)
📦 [ 17%] send@0.19.2 (cached) (17/100)
📦 [ 18%] dunder-proto@1.0.1 (cached) (18/100)
📦 [ 19%] setprototypeof@1.2.0 (cached) (19/100)
📦 [ 20%] utils-merge@1.0.1 (cached) (20/100)
📦 [ 21%] async-function@1.0.0 (cached) (21/100)
📦 [ 22%] hasown@2.0.2 (cached) (22/100)
📦 [ 23%] iconv-lite@0.4.24 (cached) (23/100)
📦 [ 24%] parseurl@1.3.3 (cached) (24/100)
📦 [ 25%] simple-update-notifier@1.1.0 (cached) (25/100)
📦 [ 26%] has-symbols@1.1.0 (cached) (26/100)
📦 [ 27%] merge-descriptors@1.0.3 (cached) (27/100)
📦 [ 28%] side-channel-list@1.0.0 (cached) (28/100)
📦 [ 29%] async-generator-function@1.0.0 (cached) (29/100)
📦 [ 30%] depd@2.0.0 (cached) (30/100)
📦 [ 31%] fill-range@7.1.1 (cached) (31/100)
📦 [ 32%] normalize-path@3.0.0 (cached) (32/100)
📦 [ 33%] mime@1.6.0 (cached) (33/100)
📦 [ 34%] range-parser@1.2.1 (cached) (34/100)
📦 [ 35%] call-bind-apply-helpers@1.0.2 (cached) (35/100)
📦 [ 36%] proxy-addr@2.0.7 (cached) (36/100)
📦 [ 37%] raw-body@2.5.3 (cached) (37/100)
📦 [ 38%] braces@3.0.3 (cached) (38/100)
📦 [ 39%] to-regex-range@5.0.1 (cached) (39/100)
📦 [ 40%] anymatch@3.1.3 (cached) (40/100)
📦 [ 41%] side-channel@1.1.0 (cached) (41/100)
📦 [ 42%] function-bind@1.1.2 (cached) (42/100)
📦 [ 43%] object-inspect@1.13.4 (cached) (43/100)
📦 [ 44%] body-parser@1.20.4 (cached) (44/100)
📦 [ 45%] cookie-signature@1.0.7 (cached) (45/100)
📦 [ 46%] safer-buffer@2.1.2 (cached) (46/100)
📦 [ 48%] finalhandler@1.3.2 (cached) (48/100)
📦 [ 47%] get-proto@1.0.1 (cached) (47/100)
📦 [ 49%] serve-static@1.16.3 (cached) (49/100)
📦 [ 50%] content-disposition@0.5.4 (cached) (50/100)
📦 [ 51%] debug@2.6.9 (cached) (51/100)
📦 [ 52%] statuses@2.0.2 (cached) (52/100)
📦 [ 53%] has-flag@3.0.0 (cached) (53/100)
📦 [ 54%] is-extglob@2.1.1 (cached) (54/100)
📦 [ 55%] brace-expansion@1.1.12 (cached) (55/100)
📦 [ 56%] http-errors@2.0.1 (cached) (56/100)
📦 [ 57%] content-type@1.0.5 (cached) (57/100)
📦 [ 58%] is-binary-path@2.1.0 (cached) (58/100)
📦 [ 59%] touch@3.1.1 (cached) (59/100)
📦 [ 60%] toidentifier@1.0.1 (cached) (60/100)
📦 [ 61%] type-is@1.6.18 (cached) (61/100)
📦 [ 62%] chokidar@3.6.0 (cached) (62/100)
📦 [ 63%] binary-extensions@2.3.0 (cached) (63/100)
📦 [ 64%] es-errors@1.3.0 (cached) (64/100)
📦 [ 65%] mime-types@2.1.35 (cached) (65/100)
📦 [ 66%] bytes@3.1.2 (cached) (66/100)
📦 [ 67%] side-channel-map@1.0.1 (cached) (67/100)
📦 [ 68%] pstree.remy@1.1.8 (cached) (68/100)
📦 [ 69%] ignore-by-default@1.0.1 (cached) (69/100)
📦 [ 70%] gopd@1.2.0 (cached) (70/100)
📦 [ 71%] call-bound@1.0.4 (cached) (71/100)
📦 [ 72%] es-object-atoms@1.1.1 (cached) (72/100)
📦 [ 73%] supports-color@5.5.0 (cached) (73/100)
📦 [ 74%] picomatch@2.3.1 (cached) (74/100)
📦 [ 75%] generator-function@2.0.1 (cached) (75/100)
📦 [ 76%] concat-map@0.0.1 (cached) (76/100)
📦 [ 77%] methods@1.1.2 (cached) (77/100)
📦 [ 78%] cookie@0.7.2 (cached) (78/100)
📦 [ 79%] vary@1.1.2 (cached) (79/100)
📦 [ 80%] qs@6.14.0 (cached) (80/100)
📦 [ 81%] escape-html@1.0.3 (cached) (81/100)
📦 [ 82%] accepts@1.3.8 (cached) (82/100)
📦 [ 83%] math-intrinsics@1.1.0 (cached) (83/100)
📦 [ 84%] express@4.22.1 (cached) (84/100)
📦 [ 85%] fresh@0.5.2 (cached) (85/100)
📦 [ 86%] is-number@7.0.0 (cached) (86/100)
📦 [ 87%] path-to-regexp@0.1.12 (cached) (87/100)
📦 [ 88%] minimatch@3.1.2 (cached) (88/100)
📦 [ 89%] inherits@2.0.4 (cached) (89/100)
📦 [ 90%] array-flatten@1.1.1 (cached) (90/100)
📦 [ 91%] undefsafe@2.0.5 (cached) (91/100)
📦 [ 92%] glob-parent@5.1.2 (cached) (92/100)
📦 [ 93%] negotiator@0.6.3 (cached) (93/100)
📦 [ 94%] side-channel-weakmap@1.0.2 (cached) (94/100)
📦 [ 95%] es-define-property@1.0.1 (cached) (95/100)
📦 [ 96%] undici-types@7.16.0 (cached) (96/100)
📦 [ 97%] nodemon@2.0.22 (cached) (97/100)
📦 [ 98%] semver@7.0.0 (cached) (98/100)
📦 [ 99%] @types/node@25.0.3 (cached) (99/100)
📦 [100%] lodash@4.17.21 (cached) (100/100)
🎉 Successfully downloaded 100 packages!
🔒 Lockfile updated
🎉 Installation completed successfully!

使用体验

链接: https://pan.baidu.com/s/17r-PMhoXXZ_oR9fkWH_aeg?pwd=vh8a

免责声明

本软件仅支持学习、交流使用,请勿用于任何商业场景。

总结

kiro似乎不如windsurf, 5000行代码后,agent开始破坏已有功能且难以修复。

相关推荐
全栈陈序员2 小时前
Vue 实例挂载的过程是怎样的?
前端·javascript·vue.js·学习·前端框架
Bruce_Liuxiaowei2 小时前
一键清理Chrome浏览器缓存:批处理与PowerShell双脚本实现
前端·chrome·缓存
怒放的生命19912 小时前
Vue 2 vs Vue 3对比 编译原理不同深度解析
前端·javascript·vue.js
GDAL3 小时前
html返回顶部实现方式对比
前端·html·返回顶部
Violet_YSWY3 小时前
ES6 () => ({}) 语法解释
前端·ecmascript·es6
LYFlied3 小时前
【每日算法】LeetCode 279. 完全平方数(动态规划)
前端·算法·leetcode·面试·动态规划
小北方城市网3 小时前
第7课:Vue 3应用性能优化与进阶实战——让你的应用更快、更流畅
前端·javascript·vue.js·ai·性能优化·正则表达式·json
向下的大树3 小时前
React 环境搭建 + 完整 Demo 教程
前端·react.js·前端框架
IT_陈寒3 小时前
Python性能翻倍的5个隐藏技巧:让你的代码跑得比同事快50%
前端·人工智能·后端