-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
20 lines (18 loc) · 21 KB
/
Copy pathindex.html
File metadata and controls
20 lines (18 loc) · 21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html><html lang="zh-CN"><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="Robbs的个人博客,记录平时在学习实践过程中的一些问题、方法、文档等等。"><meta name="keywords" content="Robbs,个人博客,Linux,运维,DevOps,架构,PHP,Ruby,Rails,JavaScript,Nginx,微服务,后端开发"><title>Robbs | 己所不欲,勿施于人</title><link rel="stylesheet" type="text/css" href="/css/style.css?v=1.0.0"><link rel="stylesheet" type="text/css" href="https://unpkg.com/normalize.css"><link rel="stylesheet" type="text/css" href="https://unpkg.com/purecss/build/pure-min.css"><link rel="stylesheet" type="text/css" href="https://unpkg.com/purecss/build/grids-responsive-min.css"><link rel="stylesheet" href="https://unpkg.com/font-awesome@4.7.0/css/font-awesome.min.css"><script type="text/javascript" src="https://unpkg.com/jquery/dist/jquery.min.js"></script><link rel="icon" mask="" sizes="any" href="/favicon.ico"><link rel="Shortcut Icon" type="image/x-icon" href="/favicon.ico"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="apple-touch-icon-precomposed" href="/apple-touch-icon.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script src="https://www.googletagmanager.com/gtag/js?id=UA-87287972-1" async></script><script>window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-87287972-1');
</script><script type="text/javascript" src="https://unpkg.com/clipboard/dist/clipboard.min.js"></script><script type="text/javascript" src="https://unpkg.com/toastr/build/toastr.min.js"></script><link rel="stylesheet" href="https://unpkg.com/toastr/build/toastr.min.css"><div class="darkmode-toggle">🌓</div><script>var prefersDarkMode = window.matchMedia('(prefers-color-scheme: dark)');
var toggle = document.querySelector('.darkmode-toggle');
var html = document.querySelector('html');
html.dataset.dark = localStorage.dark || prefersDarkMode.matches;
toggle.addEventListener('click', () => {
localStorage.dark = !(html.dataset.dark == 'true');
html.dataset.dark = localStorage.dark;
});</script><meta name="generator" content="Hexo 8.1.2"></head><body><div class="body_container"><div id="header"><div class="site-name"><h1 class="hidden">Robbs</h1><a id="logo" href="/.">Robbs</a><p class="description">己所不欲,勿施于人</p></div><div id="nav-menu"><a class="current" href="/."><i class="fa fa-home"> 首页</i></a><a href="/archives/"><i class="fa fa-archive"> 归档</i></a><a href="/about/"><i class="fa fa-user"> 关于</i></a><a href="/atom.xml"><i class="fa fa-rss"> 订阅</i></a><a href="/en/"><i class="fa fa-language"> English</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title"><a href="/2026-05-18/Eleven-Year-FullStack-Retrospective.html">11 年,一家公司:我的全栈技术体系复盘</a></h1><div class="post-meta">2026-05-18</div><div class="post-content">2014 到 2026,在一家公司待了 11 年。一直是全栈,只是技术栈一路在变——从 MEAN.JS、Rails 到 Vue、React;从 CoreTeam 到 Collateral 到 DAL 到理财线,从手写代码到 AI 编码。这是我的技术体系复盘,也是一段旅程的收尾。</div><p class="readmore"><a href="/2026-05-18/Eleven-Year-FullStack-Retrospective.html">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2026-03-15/AI-Coding-Engineering-Retrospective.html">理财线两年:AI 编码工程化这套怎么沉淀下来的</a></h1><div class="post-meta">2026-03-15</div><div class="post-content">从 2025 年初第一次用 Claude Code,到 2026 年初把 AI 编码工程化推到团队级别。这篇是理财线两年的总复盘:从 Prompt 到 Skill 到 CLAUDE.md 到 Subagent,这套体系怎么长出来的。</div><p class="readmore"><a href="/2026-03-15/AI-Coding-Engineering-Retrospective.html">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2025-09-15/CLAUDE-md-Agent-Orchestration.html">Claude Code 进团队:CLAUDE.md 和 Agent 怎么编排</a></h1><div class="post-meta">2025-09-15</div><div class="post-content">迁移跑通后,我把 Claude Code 的使用从"个人工具"推到了"团队规范"。这篇讲 CLAUDE.md 怎么写团队级的 AI 编码规范,Subagent 怎么编排多人并行。</div><p class="readmore"><a href="/2025-09-15/CLAUDE-md-Agent-Orchestration.html">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2025-07-15/Webpack-to-Vite-Lessons.html">迁移复盘:从 Webpack 切到 Vite 踩过的坑</a></h1><div class="post-meta">2025-07-15</div><div class="post-content">13 个工具从 Vue 2.7 迁到 React 19 的同时,构建工具也从 Webpack 切到了 Vite。这篇复盘踩过的坑:依赖兼容、HMR、别名、构建产物、CSS Modules 等。</div><p class="readmore"><a href="/2025-07-15/Webpack-to-Vite-Lessons.html">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2025-06-17/Reusable-Migration-Skills.html">迁移 Skill:沉淀出 10+ 个能复用的东西</a></h1><div class="post-meta">2025-06-17</div><div class="post-content">13 个工具迁完后,我把迁移过程中反复用到的规则抽成了 10+ 个 Claude Code Skill。这篇讲 Skill 到底是什么、怎么写、为什么我觉得它是最被低估的 AI 编码工具。</div><p class="readmore"><a href="/2025-06-17/Reusable-Migration-Skills.html">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2025-05-14/AI-Migration-Agent.html">UI 迁移 Agent:用 Claude Code 把 13 个工具一起迁了</a></h1><div class="post-meta">2025-05-14</div><div class="post-content">把理财线 13 个 Vue 2.7 工具整体迁到 React 19,我没有手迁,而是用 Claude Code 做了一个 UI 迁移 Agent,让 13 个工具并行跑完,一个半月交付。</div><p class="readmore"><a href="/2025-05-14/AI-Migration-Agent.html">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2025-04-15/Why-Migrate-React-19.html">为什么决定把 Vue 迁到 React 19</a></h1><div class="post-meta">2025-04-15</div><div class="post-content">Vue 2.7 到 EOL 了,React 19 刚发布。这篇文章不讲"哪个框架更好",讲的是一个具体的金融工具产品线,在 2025 年 4 月这个时间点,为什么决定迁移。</div><p class="readmore"><a href="/2025-04-15/Why-Migrate-React-19.html">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2025-02-17/Quality-Baseline-Vitest-Playwright.html">质量基线:Vitest + Playwright + ESLint 把覆盖率拉到 90%</a></h1><div class="post-meta">2025-02-17</div><div class="post-content">13 个金融工具没有测试基线是不行的。这篇讲我们怎么用 Vitest 跑单测、Playwright 跑 e2e、ESLint 守风格,核心模块覆盖率拉到 90%+。</div><p class="readmore"><a href="/2025-02-17/Quality-Baseline-Vitest-Playwright.html">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2024-12-16/UMD-Component-Library.html">组件库:10+ 组件怎么同时支持 UMD 和组件包</a></h1><div class="post-meta">2024-12-16</div><div class="post-content">13 个工具要复用一套 UI 组件,但集成方式不同——有的要 UMD 直接嵌,有的要走 npm 包 import。10+ 个组件,两种产物,一套源码。</div><p class="readmore"><a href="/2024-12-16/UMD-Component-Library.html">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2024-10-15/Reproducible-Calculation-Engine.html">金融计算引擎:让每张报表都能复算</a></h1><div class="post-meta">2024-10-15</div><div class="post-content">金融场景下报表必须可复算——给定输入和引擎版本,结果完全一致。这篇只讲工程架构怎么落地,不碰计算公式。</div><p class="readmore"><a href="/2024-10-15/Reproducible-Calculation-Engine.html">阅读全文</a></p></div><nav class="page-navigator"><span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><a class="page-number" href="/page/3/">3</a><span class="space">…</span><a class="page-number" href="/page/7/">7</a><a class="extend next" rel="next" href="/page/2/">下一页</a></nav></div></div><div class="pure-u-1-4 hidden_mid_and_down"><div id="sidebar"><div class="widget"><form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="text" name="q" maxlength="20" placeholder="Search"/><input type="hidden" name="sitesearch" value="https://www.robbs.win"/></form></div><div class="widget"><div class="search-form"><input id="local-search-input" placeholder="Search" type="text" name="q" results="0"/><div id="local-search-result"></div></div></div><div class="widget"><div class="author-info"><a class="info-avatar" href="/about/" title="About"><img class="nofancybox" src="/img/avatar.png"/></a><p>己所不欲,勿施于人</p><a class="info-icon" href="mailto:work@robbs.vip" title="Email" target="_blank" style="margin-inline:5px"> <i class="fa fa-envelope-square" style="margin-inline:5px"></i></a><a class="info-icon" href="https://github.com/RobbsLuo" title="Github" target="_blank" style="margin-inline:5px"> <i class="fa fa-github-square" style="margin-inline:5px"></i></a><a class="info-icon" href="/atom.xml" title="RSS" target="_blank" style="margin-inline:5px"> <i class="fa fa-rss-square" style="margin-inline:5px"></i></a></div></div><div class="widget"><div class="widget-title"><i class="fa fa-folder-o"> Categories</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/Architect/">Architect</a><span class="category-list-count">4</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Career/">Career</a><span class="category-list-count">36</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/DevOps/">DevOps</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Develop/">Develop</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/JavaScript/">JavaScript</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Linux/">Linux</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/PHP/">PHP</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Rails/">Rails</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Server/">Server</a><span class="category-list-count">8</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Software/">Software</a><span class="category-list-count">6</span></li></ul></div><div class="widget"><div class="widget-title"><i class="fa fa-star-o"> Tags</i></div><div class="tagcloud"><a href="/tags/Career/" style="font-size: 15px;">Career</a> <a href="/tags/Claude-Code/" style="font-size: 15px;">Claude Code</a> <a href="/tags/AI-%E5%B7%A5%E7%A8%8B%E5%8C%96/" style="font-size: 15px;">AI 工程化</a> <a href="/tags/Agent/" style="font-size: 15px;">Agent</a> <a href="/tags/Aliyun/" style="font-size: 15px;">Aliyun</a> <a href="/tags/IPv6/" style="font-size: 15px;">IPv6</a> <a href="/tags/CLAUDE-md/" style="font-size: 15px;">CLAUDE.md</a> <a href="/tags/AirFlow/" style="font-size: 15px;">AirFlow</a> <a href="/tags/%E6%95%B0%E6%8D%AE%E6%B8%85%E6%B4%97/" style="font-size: 15px;">数据清洗</a> <a href="/tags/Container/" style="font-size: 15px;">Container</a> <a href="/tags/Architect/" style="font-size: 15px;">Architect</a> <a href="/tags/PHP/" style="font-size: 15px;">PHP</a> <a href="/tags/Yii2/" style="font-size: 15px;">Yii2</a> <a href="/tags/DynamoDB/" style="font-size: 15px;">DynamoDB</a> <a href="/tags/Software/" style="font-size: 15px;">Software</a> <a href="/tags/ELK/" style="font-size: 15px;">ELK</a> <a href="/tags/DevOps/" style="font-size: 15px;">DevOps</a> <a href="/tags/Logging/" style="font-size: 15px;">Logging</a> <a href="/tags/AWS-ECS/" style="font-size: 15px;">AWS ECS</a> <a href="/tags/Docker/" style="font-size: 15px;">Docker</a> <a href="/tags/docker-compose/" style="font-size: 15px;">docker-compose</a> <a href="/tags/Retrospective/" style="font-size: 15px;">Retrospective</a> <a href="/tags/Reflection/" style="font-size: 15px;">Reflection</a> <a href="/tags/%E5%85%A8%E6%A0%88/" style="font-size: 15px;">全栈</a> <a href="/tags/%E5%A4%8D%E7%9B%98/" style="font-size: 15px;">复盘</a> <a href="/tags/%E7%94%A8%E6%88%B7%E7%94%BB%E5%83%8F/" style="font-size: 15px;">用户画像</a> <a href="/tags/Git/" style="font-size: 15px;">Git</a> <a href="/tags/Ubuntu/" style="font-size: 15px;">Ubuntu</a> <a href="/tags/HTTPS/" style="font-size: 15px;">HTTPS</a> <a href="/tags/Nginx/" style="font-size: 15px;">Nginx</a> <a href="/tags/Server/" style="font-size: 15px;">Server</a> <a href="/tags/%E6%95%B0%E6%8D%AE%E7%AE%A1%E9%81%93/" style="font-size: 15px;">数据管道</a> <a href="/tags/Humanity/" style="font-size: 15px;">Humanity</a> <a href="/tags/MongoDB/" style="font-size: 15px;">MongoDB</a> <a href="/tags/Supervisord/" style="font-size: 15px;">Supervisord</a> <a href="/tags/Shadowsocks/" style="font-size: 15px;">Shadowsocks</a> <a href="/tags/JavaScript/" style="font-size: 15px;">JavaScript</a> <a href="/tags/Currying/" style="font-size: 15px;">Currying</a> <a href="/tags/Linux/" style="font-size: 15px;">Linux</a> <a href="/tags/Shell/" style="font-size: 15px;">Shell</a> <a href="/tags/Async/" style="font-size: 15px;">Async</a> <a href="/tags/Deployment/" style="font-size: 15px;">Deployment</a> <a href="/tags/MicroService/" style="font-size: 15px;">MicroService</a> <a href="/tags/Jenkins/" style="font-size: 15px;">Jenkins</a> <a href="/tags/GitLab-CI/" style="font-size: 15px;">GitLab CI</a> <a href="/tags/GitHub-Actions/" style="font-size: 15px;">GitHub Actions</a> <a href="/tags/OAuth/" style="font-size: 15px;">OAuth</a> <a href="/tags/OSX/" style="font-size: 15px;">OSX</a> <a href="/tags/Tips/" style="font-size: 15px;">Tips</a> <a href="/tags/Process-Manager/" style="font-size: 15px;">Process Manager</a> <a href="/tags/AWS/" style="font-size: 15px;">AWS</a> <a href="/tags/Security/" style="font-size: 15px;">Security</a> <a href="/tags/IAM/" style="font-size: 15px;">IAM</a> <a href="/tags/Vitest/" style="font-size: 15px;">Vitest</a> <a href="/tags/Playwright/" style="font-size: 15px;">Playwright</a> <a href="/tags/ESLint/" style="font-size: 15px;">ESLint</a> <a href="/tags/%E6%B5%8B%E8%AF%95%E8%A6%86%E7%9B%96%E7%8E%87/" style="font-size: 15px;">测试覆盖率</a> <a href="/tags/Ruby/" style="font-size: 15px;">Ruby</a> <a href="/tags/Cache/" style="font-size: 15px;">Cache</a> <a href="/tags/Rails/" style="font-size: 15px;">Rails</a> <a href="/tags/Skill/" style="font-size: 15px;">Skill</a> <a href="/tags/SQS/" style="font-size: 15px;">SQS</a> <a href="/tags/%E8%AE%A1%E7%AE%97%E5%BC%95%E6%93%8E/" style="font-size: 15px;">计算引擎</a> <a href="/tags/%E5%8F%AF%E5%A4%8D%E7%AE%97/" style="font-size: 15px;">可复算</a> <a href="/tags/%E5%B7%A5%E7%A8%8B%E6%9E%B6%E6%9E%84/" style="font-size: 15px;">工程架构</a> <a href="/tags/Siege/" style="font-size: 15px;">Siege</a> <a href="/tags/PPA/" style="font-size: 15px;">PPA</a> <a href="/tags/Sources/" style="font-size: 15px;">Sources</a> <a href="/tags/Spring-Boot/" style="font-size: 15px;">Spring Boot</a> <a href="/tags/Java/" style="font-size: 15px;">Java</a> <a href="/tags/%E5%90%8E%E7%AB%AF%E6%9E%B6%E6%9E%84/" style="font-size: 15px;">后端架构</a> <a href="/tags/Terraform/" style="font-size: 15px;">Terraform</a> <a href="/tags/IaC/" style="font-size: 15px;">IaC</a> <a href="/tags/Python/" style="font-size: 15px;">Python</a> <a href="/tags/Refactor/" style="font-size: 15px;">Refactor</a> <a href="/tags/%E7%BB%84%E4%BB%B6%E5%BA%93/" style="font-size: 15px;">组件库</a> <a href="/tags/UMD/" style="font-size: 15px;">UMD</a> <a href="/tags/%E8%B7%A8%E5%B7%A5%E5%85%B7%E5%A4%8D%E7%94%A8/" style="font-size: 15px;">跨工具复用</a> <a href="/tags/VIPS/" style="font-size: 15px;">VIPS</a> <a href="/tags/Vue/" style="font-size: 15px;">Vue</a> <a href="/tags/%E5%8F%AF%E8%A7%86%E5%8C%96/" style="font-size: 15px;">可视化</a> <a href="/tags/Swap/" style="font-size: 15px;">Swap</a> <a href="/tags/rbenv/" style="font-size: 15px;">rbenv</a> <a href="/tags/brew/" style="font-size: 15px;">brew</a> <a href="/tags/ruby/" style="font-size: 15px;">ruby</a> <a href="/tags/SpringBoot/" style="font-size: 15px;">SpringBoot</a> <a href="/tags/Vite/" style="font-size: 15px;">Vite</a> <a href="/tags/Webpack/" style="font-size: 15px;">Webpack</a> <a href="/tags/Mina/" style="font-size: 15px;">Mina</a> <a href="/tags/Deploy/" style="font-size: 15px;">Deploy</a> <a href="/tags/React-19/" style="font-size: 15px;">React 19</a> <a href="/tags/%E6%8A%80%E6%9C%AF%E9%80%89%E5%9E%8B/" style="font-size: 15px;">技术选型</a> <a href="/tags/GEM/" style="font-size: 15px;">GEM</a> <a href="/tags/Monorepo/" style="font-size: 15px;">Monorepo</a> <a href="/tags/pnpm/" style="font-size: 15px;">pnpm</a> <a href="/tags/%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%8C%96/" style="font-size: 15px;">前端工程化</a></div></div><div class="widget"><div class="widget-title"><i class="fa fa-file-o"> Recent</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/2026-05-18/Eleven-Year-FullStack-Retrospective.html">11 年,一家公司:我的全栈技术体系复盘</a></li><li class="post-list-item"><a class="post-list-link" href="/2026-03-15/AI-Coding-Engineering-Retrospective.html">理财线两年:AI 编码工程化这套怎么沉淀下来的</a></li><li class="post-list-item"><a class="post-list-link" href="/2025-09-15/CLAUDE-md-Agent-Orchestration.html">Claude Code 进团队:CLAUDE.md 和 Agent 怎么编排</a></li><li class="post-list-item"><a class="post-list-link" href="/2025-07-15/Webpack-to-Vite-Lessons.html">迁移复盘:从 Webpack 切到 Vite 踩过的坑</a></li><li class="post-list-item"><a class="post-list-link" href="/2025-06-17/Reusable-Migration-Skills.html">迁移 Skill:沉淀出 10+ 个能复用的东西</a></li><li class="post-list-item"><a class="post-list-link" href="/2025-05-14/AI-Migration-Agent.html">UI 迁移 Agent:用 Claude Code 把 13 个工具一起迁了</a></li><li class="post-list-item"><a class="post-list-link" href="/2025-04-15/Why-Migrate-React-19.html">为什么决定把 Vue 迁到 React 19</a></li><li class="post-list-item"><a class="post-list-link" href="/2025-02-17/Quality-Baseline-Vitest-Playwright.html">质量基线:Vitest + Playwright + ESLint 把覆盖率拉到 90%</a></li><li class="post-list-item"><a class="post-list-link" href="/2024-12-16/UMD-Component-Library.html">组件库:10+ 组件怎么同时支持 UMD 和组件包</a></li><li class="post-list-item"><a class="post-list-link" href="/2024-10-15/Reproducible-Calculation-Engine.html">金融计算引擎:让每张报表都能复算</a></li></ul></div><div class="widget"><div class="widget-title"><i class="fa fa-external-link"> Links</i></div></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer">Copyright © 2026 <a href="/." rel="nofollow">Robbs.</a> Powered by<a rel="nofollow" target="_blank" href="https://hexo.io"> Hexo.</a><a rel="nofollow" target="_blank" href="https://github.com/tufu9441/maupassant-hexo"> Theme</a> by<a rel="nofollow" target="_blank" href="https://github.com/pagecho"> Cho.</a></div></div></div><a class="show" id="rocket" href="#top"></a><script type="text/javascript" src="/js/totop.js?v=1.0.0" async></script><script type="text/javascript" src="https://unpkg.com/@fancyapps/fancybox/dist/jquery.fancybox.min.js" async></script><script type="text/javascript" src="/js/fancybox.js?v=1.0.0" async></script><link rel="stylesheet" type="text/css" href="https://unpkg.com/@fancyapps/fancybox/dist/jquery.fancybox.min.css"><link rel="stylesheet" type="text/css" href="/css/search.css?v=1.0.0"><script type="text/javascript" src="/js/search.js?v=1.0.0"></script><script>var search_path = 'search.xml';
if (search_path.length == 0) {
search_path = 'search.xml';
}
var path = '/' + search_path;
searchFunc(path, 'local-search-input', 'local-search-result');
</script><script type="text/javascript" src="/js/copycode.js?v=1.0.0" successtext="复制成功!"></script><link rel="stylesheet" type="text/css" href="/css/copycode.css?v=1.0.0"><script type="text/javascript" src="/js/codeblock-resizer.js?v=1.0.0"></script><script type="text/javascript" src="/js/smartresize.js?v=1.0.0"></script></div></body></html>