<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>牧宇的Blog</title><link>https://www.lihuanyu.com</link><description>以代码记行藏，以文字观万象；守寸心而求真，循长风以致远。</description><item><title>From tinify-cli to imgasset: Turning Blog Images into a Pipeline</title><link>https://www.lihuanyu.com/en/posts/2026/from-tinify-cli-to-imgasset-turning-blog-images-into-a-pipeline/</link><guid>https://www.lihuanyu.com/en/posts/2026/from-tinify-cli-to-imgasset-turning-blog-images-into-a-pipeline/</guid><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate><description>How a repeated blog image workflow became two reusable npm CLI tools: tinify-cli for compression and imgasset for AI generation, raw asset storage, compression, and publishing.</description></item><item><title>从 tinify-cli 到 imgasset：把博客配图做成一条流水线</title><link>https://www.lihuanyu.com/posts/2026/%E4%BB%8E-tinify-cli-%E5%88%B0-imgasset-%E6%8A%8A%E5%8D%9A%E5%AE%A2%E9%85%8D%E5%9B%BE%E5%81%9A%E6%88%90%E4%B8%80%E6%9D%A1%E6%B5%81%E6%B0%B4%E7%BA%BF/</link><guid>https://www.lihuanyu.com/posts/2026/%E4%BB%8E-tinify-cli-%E5%88%B0-imgasset-%E6%8A%8A%E5%8D%9A%E5%AE%A2%E9%85%8D%E5%9B%BE%E5%81%9A%E6%88%90%E4%B8%80%E6%9D%A1%E6%B5%81%E6%B0%B4%E7%BA%BF/</guid><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate><description>从图片压缩工具 tinify-cli 到 AI 生图与压缩一体化工具 imgasset，记录一套博客配图工作流如何从临时脚本沉淀成可复用的 npm CLI。</description></item><item><title>Static Sites Are Having a Renaissance. Here Is Why I Chose Astro</title><link>https://www.lihuanyu.com/en/posts/2026/static-sites-renaissance-why-i-chose-astro/</link><guid>https://www.lihuanyu.com/en/posts/2026/static-sites-renaissance-why-i-chose-astro/</guid><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate><description>A reflection on why Astro fits content-driven static sites, based on recent website projects, a blog migration from Hexo to Astro, and comparisons with Hugo, Eleventy, VitePress, Docusaurus, and Next.js.</description></item><item><title>静态网站回潮时，我为什么选择 Astro</title><link>https://www.lihuanyu.com/posts/2026/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99%E5%9B%9E%E6%BD%AE%E6%97%B6-%E6%88%91%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9-Astro/</link><guid>https://www.lihuanyu.com/posts/2026/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99%E5%9B%9E%E6%BD%AE%E6%97%B6-%E6%88%91%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9-Astro/</guid><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate><description>从 Cloudflare 关于静态站点生成器的讨论出发，结合个人官网项目和博客从 Hexo 迁移到 Astro 的实践，讨论 Astro 为什么适合内容型静态网站，以及它和 Hugo、Eleventy、VitePress、Docusaurus、Next.js 等方案的取舍。</description></item><item><title>AI 时代，有重构的自由</title><link>https://www.lihuanyu.com/posts/2026/AI%E6%97%B6%E4%BB%A3%E6%9C%89%E9%87%8D%E6%9E%84%E7%9A%84%E8%87%AA%E7%94%B1/</link><guid>https://www.lihuanyu.com/posts/2026/AI%E6%97%B6%E4%BB%A3%E6%9C%89%E9%87%8D%E6%9E%84%E7%9A%84%E8%87%AA%E7%94%B1/</guid><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate><description>从 Bun 迁移到 Rust 和个人项目从 SolidJS 迁到 Vue 出发，讨论 AI 如何降低重构成本，以及技术选型在 AI 时代为什么逐渐从一次性押注变成可持续修正。</description></item><item><title>In the AI Era, Developers Have the Freedom to Refactor</title><link>https://www.lihuanyu.com/en/posts/2026/developers-have-the-freedom-to-refactor-ai-era/</link><guid>https://www.lihuanyu.com/en/posts/2026/developers-have-the-freedom-to-refactor-ai-era/</guid><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate><description>A reflection on Bun&apos;s move toward Rust, a small SolidJS-to-Vue migration, and why technical choices in the AI era are becoming less like permanent bets and more like decisions that can be revised.</description></item><item><title>AI Broke the Zero Marginal Cost Myth of the Internet</title><link>https://www.lihuanyu.com/en/posts/2026/ai-broke-the-zero-marginal-cost-myth-of-the-internet/</link><guid>https://www.lihuanyu.com/en/posts/2026/ai-broke-the-zero-marginal-cost-myth-of-the-internet/</guid><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate><description>A reflection on why AI applications feel less like traditional internet products and more like on-demand production, where every useful answer, image, and agent run has a real cost.</description></item><item><title>AI 打破了互联网的零边际成本神话</title><link>https://www.lihuanyu.com/posts/2026/AI%E6%89%93%E7%A0%B4%E4%BA%86%E4%BA%92%E8%81%94%E7%BD%91%E7%9A%84%E9%9B%B6%E8%BE%B9%E9%99%85%E6%88%90%E6%9C%AC%E7%A5%9E%E8%AF%9D/</link><guid>https://www.lihuanyu.com/posts/2026/AI%E6%89%93%E7%A0%B4%E4%BA%86%E4%BA%92%E8%81%94%E7%BD%91%E7%9A%84%E9%9B%B6%E8%BE%B9%E9%99%85%E6%88%90%E6%9C%AC%E7%A5%9E%E8%AF%9D/</guid><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate><description>从 AI 应用的真实账单出发，重新理解传统互联网的低边际成本、AI 的按需生产属性，以及免费、增长和独立开发在 AI 时代为什么都要重新算账。</description></item><item><title>I Built a FIRE Calculator Because Financial Freedom Should Not Depend on Vibes</title><link>https://www.lihuanyu.com/en/posts/2026/i-built-a-fire-calculator-financial-freedom-should-not-depend-on-vibes/</link><guid>https://www.lihuanyu.com/en/posts/2026/i-built-a-fire-calculator-financial-freedom-should-not-depend-on-vibes/</guid><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><description>A personal reflection on why I built ChooseFIRE, and how a simple calculator can make income, spending, savings rate, returns, and personal freedom easier to reason about.</description></item><item><title>我做了一个 FIRE 计算器：财务自由不该只靠感觉</title><link>https://www.lihuanyu.com/posts/2026/%E6%88%91%E5%81%9A%E4%BA%86%E4%B8%80%E4%B8%AAFIRE%E8%AE%A1%E7%AE%97%E5%99%A8-%E8%B4%A2%E5%8A%A1%E8%87%AA%E7%94%B1%E4%B8%8D%E8%AF%A5%E5%8F%AA%E9%9D%A0%E6%84%9F%E8%A7%89/</link><guid>https://www.lihuanyu.com/posts/2026/%E6%88%91%E5%81%9A%E4%BA%86%E4%B8%80%E4%B8%AAFIRE%E8%AE%A1%E7%AE%97%E5%99%A8-%E8%B4%A2%E5%8A%A1%E8%87%AA%E7%94%B1%E4%B8%8D%E8%AF%A5%E5%8F%AA%E9%9D%A0%E6%84%9F%E8%A7%89/</guid><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><description>从接触 FIRE 的个人感受出发，聊聊为什么做 ChooseFIRE，以及一个计算器能如何帮助人更清楚地理解收入、支出、储蓄率和选择权之间的关系。</description></item><item><title>DeepSeek API 接入 SillyTavern：不用本地显卡的小酒馆方案</title><link>https://www.lihuanyu.com/posts/deepseek-api-sillytavern-no-gpu/</link><guid>https://www.lihuanyu.com/posts/deepseek-api-sillytavern-no-gpu/</guid><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate><description>在没有高性能显卡的情况下，通过 DeepSeek 官方 API 和 SillyTavern 的 Chat Completion / OpenAI-compatible 配置，把小酒馆连接到云端 DeepSeek 模型。</description></item><item><title>墨屿 InkIsle：我为什么又写了一个博客系统</title><link>https://www.lihuanyu.com/posts/2026/%E5%A2%A8%E5%B1%BF-InkIsle-%E6%88%91%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8F%88%E5%86%99%E4%BA%86%E4%B8%80%E4%B8%AA%E5%8D%9A%E5%AE%A2%E7%B3%BB%E7%BB%9F/</link><guid>https://www.lihuanyu.com/posts/2026/%E5%A2%A8%E5%B1%BF-InkIsle-%E6%88%91%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8F%88%E5%86%99%E4%BA%86%E4%B8%80%E4%B8%AA%E5%8D%9A%E5%AE%A2%E7%B3%BB%E7%BB%9F/</guid><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate><description>从 Hexo 个人博客迁移出发，介绍墨屿 InkIsle 的背景、设计取舍、实现方案、迁移结果、使用方式和未来开源计划。</description></item><item><title>AI时代，前后端分离不该再是默认选项</title><link>https://www.lihuanyu.com/posts/2026/AI%E6%97%B6%E4%BB%A3%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB%E4%B8%8D%E8%AF%A5%E5%86%8D%E6%98%AF%E9%BB%98%E8%AE%A4%E9%80%89%E9%A1%B9/</link><guid>https://www.lihuanyu.com/posts/2026/AI%E6%97%B6%E4%BB%A3%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB%E4%B8%8D%E8%AF%A5%E5%86%8D%E6%98%AF%E9%BB%98%E8%AE%A4%E9%80%89%E9%A1%B9/</guid><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate><description>从 AI 对上下文完整性的依赖出发，重新讨论前后端分离、产品层全栈、同构框架和业务域团队在新时代的默认选择。</description></item><item><title>In the AI Era, Frontend-Backend Separation Should No Longer Be the Default</title><link>https://www.lihuanyu.com/en/posts/2026/frontend-backend-separation-should-not-be-default-ai-era/</link><guid>https://www.lihuanyu.com/en/posts/2026/frontend-backend-separation-should-not-be-default-ai-era/</guid><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate><description>A reflection on why AI changes the cost-benefit balance of frontend-backend separation, and why product-layer full stack should become the default for many projects.</description></item><item><title>Rethinking Docker: Development Environments, Linux Overhead, and Redis in Practice</title><link>https://www.lihuanyu.com/en/posts/2025/rethinking-docker-development-linux-redis/</link><guid>https://www.lihuanyu.com/en/posts/2025/rethinking-docker-development-linux-redis/</guid><pubDate>Sat, 08 Nov 2025 00:00:00 GMT</pubDate><description>A practical reassessment of Docker across local development, Docker Desktop overhead, Linux server performance, and a small Redis deployment with Compose.</description></item><item><title>重新认识 Docker：开发环境、Linux 性能开销与 Redis 实战</title><link>https://www.lihuanyu.com/posts/2025/%E9%87%8D%E6%96%B0%E8%AE%A4%E8%AF%86Docker%E7%9A%84%E6%80%A7%E8%83%BD%E5%BC%80%E9%94%80/</link><guid>https://www.lihuanyu.com/posts/2025/%E9%87%8D%E6%96%B0%E8%AE%A4%E8%AF%86Docker%E7%9A%84%E6%80%A7%E8%83%BD%E5%BC%80%E9%94%80/</guid><pubDate>Sat, 08 Nov 2025 00:00:00 GMT</pubDate><description>从早期用 Docker 统一开发环境，到后来在 Linux 服务器上部署 Redis，重新梳理 Docker 在开发机和服务器上的真实成本、适用边界和实践细节。</description></item><item><title>NestJS 框架下的三种测试类型对比分析</title><link>https://www.lihuanyu.com/posts/2025/NestJS-%E6%A1%86%E6%9E%B6%E4%B8%8B%E7%9A%84%E4%B8%89%E7%A7%8D%E6%B5%8B%E8%AF%95%E7%B1%BB%E5%9E%8B%E5%AF%B9%E6%AF%94%E5%88%86%E6%9E%90/</link><guid>https://www.lihuanyu.com/posts/2025/NestJS-%E6%A1%86%E6%9E%B6%E4%B8%8B%E7%9A%84%E4%B8%89%E7%A7%8D%E6%B5%8B%E8%AF%95%E7%B1%BB%E5%9E%8B%E5%AF%B9%E6%AF%94%E5%88%86%E6%9E%90/</guid><pubDate>Sun, 20 Jul 2025 00:00:00 GMT</pubDate><description>以 NestJS 为例，对比单元测试、集成测试和端到端测试的测试范围、执行特性、实现方式和适用场景。</description></item><item><title>GitHub Actions 自动发布 npm 包简易指南</title><link>https://www.lihuanyu.com/posts/2025/GitHub-Actions-%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83-npm-%E5%8C%85%E7%AE%80%E6%98%93%E6%8C%87%E5%8D%97/</link><guid>https://www.lihuanyu.com/posts/2025/GitHub-Actions-%E8%87%AA%E5%8A%A8%E5%8F%91%E5%B8%83-npm-%E5%8C%85%E7%AE%80%E6%98%93%E6%8C%87%E5%8D%97/</guid><pubDate>Sat, 19 Jul 2025 00:00:00 GMT</pubDate><description>已并入《GitHub Actions 适合做什么，不适合做什么》。</description></item><item><title>无人驾驶与人因工程</title><link>https://www.lihuanyu.com/posts/2025/%E6%97%A0%E4%BA%BA%E9%A9%BE%E9%A9%B6%E4%B8%8E%E4%BA%BA%E5%9B%A0%E5%B7%A5%E7%A8%8B/</link><guid>https://www.lihuanyu.com/posts/2025/%E6%97%A0%E4%BA%BA%E9%A9%BE%E9%A9%B6%E4%B8%8E%E4%BA%BA%E5%9B%A0%E5%B7%A5%E7%A8%8B/</guid><pubDate>Sat, 26 Apr 2025 00:00:00 GMT</pubDate><description>从小米 SU7 高速事故谈起，借助情景意识和自动化接管问题讨论智能驾驶中的人因工程风险。</description></item><item><title>How to Implement Login with GitHub Safely</title><link>https://www.lihuanyu.com/en/posts/2025/implement-login-with-github-safely/</link><guid>https://www.lihuanyu.com/en/posts/2025/implement-login-with-github-safely/</guid><pubDate>Sun, 20 Apr 2025 00:00:00 GMT</pubDate><description>A practical server-side GitHub OAuth login flow using state validation, authorization code exchange, GitHub user lookup, and a local session.</description></item><item><title>如何集成 GitHub 登录</title><link>https://www.lihuanyu.com/posts/2025/%E5%A6%82%E4%BD%95%E9%9B%86%E6%88%90Github%E7%99%BB%E5%BD%95/</link><guid>https://www.lihuanyu.com/posts/2025/%E5%A6%82%E4%BD%95%E9%9B%86%E6%88%90Github%E7%99%BB%E5%BD%95/</guid><pubDate>Sun, 20 Apr 2025 00:00:00 GMT</pubDate><description>从 GitHub OAuth Web application flow 出发，说明如何用服务端完成授权码换 token、校验 state，并创建本站登录态。</description></item><item><title>互联网创业寒冬</title><link>https://www.lihuanyu.com/posts/2025/%E4%BA%92%E8%81%94%E7%BD%91%E5%88%9B%E4%B8%9A%E5%AF%92%E5%86%AC/</link><guid>https://www.lihuanyu.com/posts/2025/%E4%BA%92%E8%81%94%E7%BD%91%E5%88%9B%E4%B8%9A%E5%AF%92%E5%86%AC/</guid><pubDate>Sun, 16 Feb 2025 00:00:00 GMT</pubDate><description>已并入《平台、算法与创作者：为什么还需要独立博客》。</description></item><item><title>在 GitHub Actions 里构建大型 Docker 镜像</title><link>https://www.lihuanyu.com/posts/2025/%E5%9C%A8Github%20Action%E9%87%8C%E6%9E%84%E5%BB%BA%E5%A4%A7%E5%9E%8BDocker%E9%95%9C%E5%83%8F/</link><guid>https://www.lihuanyu.com/posts/2025/%E5%9C%A8Github%20Action%E9%87%8C%E6%9E%84%E5%BB%BA%E5%A4%A7%E5%9E%8BDocker%E9%95%9C%E5%83%8F/</guid><pubDate>Sun, 16 Feb 2025 00:00:00 GMT</pubDate><description>已并入《GitHub Actions 适合做什么，不适合做什么》。</description></item><item><title>小程序组件库该用rpx还是px？</title><link>https://www.lihuanyu.com/posts/2025/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%BB%84%E4%BB%B6%E5%BA%93%E8%AF%A5%E7%94%A8rpx%E8%BF%98%E6%98%AFpx/</link><guid>https://www.lihuanyu.com/posts/2025/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%BB%84%E4%BB%B6%E5%BA%93%E8%AF%A5%E7%94%A8rpx%E8%BF%98%E6%98%AFpx/</guid><pubDate>Sat, 15 Feb 2025 00:00:00 GMT</pubDate><description>分析小程序组件库使用 px 与业务开发使用 rpx 的矛盾，并讨论组件库双模式、构建转换和团队选型的工程方案。</description></item><item><title>DeepSeek R1 接入 SillyTavern 小酒馆：Ollama 本地部署教程</title><link>https://www.lihuanyu.com/posts/2025/%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2deepseek%E4%B8%8ESillyTavern/</link><guid>https://www.lihuanyu.com/posts/2025/%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2deepseek%E4%B8%8ESillyTavern/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate><description>在 Windows 上用 Ollama 运行 DeepSeek R1，并把 SillyTavern 小酒馆连接到本机模型服务，包含模型选择、显存要求、API 配置和常见问题。</description></item><item><title>Platforms, Algorithms, and Creators: Why Independent Blogs Still Matter</title><link>https://www.lihuanyu.com/en/posts/2025/platform-algorithms-independent-creators/</link><guid>https://www.lihuanyu.com/en/posts/2025/platform-algorithms-independent-creators/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate><description>A reflection on platform power, algorithmic distribution, creator assets, and why independent blogs still matter when most attention comes from social platforms.</description></item><item><title>平台、算法与创作者：为什么还需要独立博客</title><link>https://www.lihuanyu.com/posts/2025/%E5%9C%A8%E5%9B%BD%E5%86%85%E7%9A%84%E5%B9%B3%E5%8F%B0%E4%BD%A0%E6%B2%A1%E6%9C%89%E7%B2%89%E4%B8%9D/</link><guid>https://www.lihuanyu.com/posts/2025/%E5%9C%A8%E5%9B%BD%E5%86%85%E7%9A%84%E5%B9%B3%E5%8F%B0%E4%BD%A0%E6%B2%A1%E6%9C%89%E7%B2%89%E4%B8%9D/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate><description>从大厂兴衰、算法分发、公众号红包封面和互联网创业寒冬出发，讨论创作者为什么不能只依赖平台，以及独立博客真正能沉淀什么。</description></item><item><title>【译】什么是前端架构</title><link>https://www.lihuanyu.com/posts/2025/%E4%BB%80%E4%B9%88%E6%98%AF%E5%89%8D%E7%AB%AF%E6%9E%B6%E6%9E%84/</link><guid>https://www.lihuanyu.com/posts/2025/%E4%BB%80%E4%B9%88%E6%98%AF%E5%89%8D%E7%AB%AF%E6%9E%B6%E6%9E%84/</guid><pubDate>Wed, 29 Jan 2025 00:00:00 GMT</pubDate><description>翻译并整理前端架构的核心观点，强调架构不是目录结构，而是围绕业务驱动因素、权衡取舍和限制做出的重要决策。</description></item><item><title>25 年的微信红包封面</title><link>https://www.lihuanyu.com/posts/2025/25%E5%B9%B4%E7%9A%84%E5%BE%AE%E4%BF%A1%E7%BA%A2%E5%8C%85%E5%B0%81%E9%9D%A2/</link><guid>https://www.lihuanyu.com/posts/2025/25%E5%B9%B4%E7%9A%84%E5%BE%AE%E4%BF%A1%E7%BA%A2%E5%8C%85%E5%B0%81%E9%9D%A2/</guid><pubDate>Mon, 27 Jan 2025 00:00:00 GMT</pubDate><description>已并入《平台、算法与创作者：为什么还需要独立博客》。</description></item><item><title>AI 应用开发者的困局：用户来了，账单也来了</title><link>https://www.lihuanyu.com/posts/2024/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E8%80%85%E7%9A%84%E5%9B%B0%E5%B1%80/</link><guid>https://www.lihuanyu.com/posts/2024/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E8%80%85%E7%9A%84%E5%9B%B0%E5%B1%80/</guid><pubDate>Sun, 22 Sep 2024 00:00:00 GMT</pubDate><description>从 AI 绘图小程序的真实数据出发，讨论独立开发者做 AI 应用时最先撞上的问题：留存低、移动端使用频率有限、推理和绘图成本真实存在，免费增长不再天然是一件好事。</description></item><item><title>如何把svg渲染成png图片</title><link>https://www.lihuanyu.com/posts/2024/%E5%A6%82%E4%BD%95%E6%8A%8Asvg%E6%B8%B2%E6%9F%93%E6%88%90png%E5%9B%BE%E7%89%87/</link><guid>https://www.lihuanyu.com/posts/2024/%E5%A6%82%E4%BD%95%E6%8A%8Asvg%E6%B8%B2%E6%9F%93%E6%88%90png%E5%9B%BE%E7%89%87/</guid><pubDate>Sat, 21 Sep 2024 00:00:00 GMT</pubDate><description>记录把 AI 生成的 SVG 转为 PNG 的实践，比较 Cloudflare Worker、小程序 Canvas 和服务器端 sharp 方案的可行性。</description></item><item><title>图床系列之 TinyPNG 自动压缩图片</title><link>https://www.lihuanyu.com/posts/2024/%E5%9B%BE%E5%BA%8A%E7%B3%BB%E5%88%97%E4%B9%8Btinypng%E8%87%AA%E5%8A%A8%E5%8E%8B%E7%BC%A9%E5%9B%BE%E7%89%87/</link><guid>https://www.lihuanyu.com/posts/2024/%E5%9B%BE%E5%BA%8A%E7%B3%BB%E5%88%97%E4%B9%8Btinypng%E8%87%AA%E5%8A%A8%E5%8E%8B%E7%BC%A9%E5%9B%BE%E7%89%87/</guid><pubDate>Sat, 18 May 2024 00:00:00 GMT</pubDate><description>已合并至 Cloudflare R2 图床完整方案。</description></item><item><title>shadcn/ui 为什么不是传统组件库</title><link>https://www.lihuanyu.com/posts/2024/shadcn-ui%E7%BB%84%E4%BB%B6%E5%BA%93/</link><guid>https://www.lihuanyu.com/posts/2024/shadcn-ui%E7%BB%84%E4%BB%B6%E5%BA%93/</guid><pubDate>Wed, 07 Feb 2024 00:00:00 GMT</pubDate><description>从 shadcn/ui 的源码分发思路出发，讨论它为什么不把自己当成传统 npm 组件库，以及复制源码、组件所有权、团队组件库和升级成本之间的取舍。</description></item><item><title>Build a Personal Image Hosting Service with Cloudflare R2</title><link>https://www.lihuanyu.com/en/posts/2023/cloudflare-r2-image-hosting/</link><guid>https://www.lihuanyu.com/en/posts/2023/cloudflare-r2-image-hosting/</guid><pubDate>Mon, 04 Dec 2023 00:00:00 GMT</pubDate><description>A practical setup for turning Cloudflare R2, Workers, D1, Pages, and TinyPNG into a personal image hosting workflow for a static blog.</description></item><item><title>大厂的起起落落</title><link>https://www.lihuanyu.com/posts/2023/%E5%A4%A7%E5%8E%82%E7%9A%84%E8%B5%B7%E8%B5%B7%E8%90%BD%E8%90%BD/</link><guid>https://www.lihuanyu.com/posts/2023/%E5%A4%A7%E5%8E%82%E7%9A%84%E8%B5%B7%E8%B5%B7%E8%90%BD%E8%90%BD/</guid><pubDate>Mon, 04 Dec 2023 00:00:00 GMT</pubDate><description>已并入《平台、算法与创作者：为什么还需要独立博客》。</description></item><item><title>用 Cloudflare R2 搭建个人图床：上传、压缩、访问与成本</title><link>https://www.lihuanyu.com/posts/2023/%E4%BD%BF%E7%94%A8cloudflare%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%9B%BE%E5%BA%8A/</link><guid>https://www.lihuanyu.com/posts/2023/%E4%BD%BF%E7%94%A8cloudflare%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%9B%BE%E5%BA%8A/</guid><pubDate>Mon, 04 Dec 2023 00:00:00 GMT</pubDate><description>从只用 R2 控制台上传，到基于 Cloudflare Workers、D1、Pages 和 TinyPNG 搭建一个可用的个人图床应用。</description></item><item><title>英语的口音</title><link>https://www.lihuanyu.com/posts/2023/%E8%8B%B1%E8%AF%AD%E7%9A%84%E5%8F%A3%E9%9F%B3/</link><guid>https://www.lihuanyu.com/posts/2023/%E8%8B%B1%E8%AF%AD%E7%9A%84%E5%8F%A3%E9%9F%B3/</guid><pubDate>Sun, 12 Nov 2023 00:00:00 GMT</pubDate><description>从印度、日本和中国人说英语的口音差异出发，解释清浊、送气、不送气等发音差异为什么会影响英语可理解度。</description></item><item><title>NestJS Interceptors and How to Skip Response Wrapping</title><link>https://www.lihuanyu.com/en/posts/2023/nestjs-interceptors-skip-response-wrapping/</link><guid>https://www.lihuanyu.com/en/posts/2023/nestjs-interceptors-skip-response-wrapping/</guid><pubDate>Sun, 22 Oct 2023 00:00:00 GMT</pubDate><description>How to use a global NestJS interceptor to wrap successful API responses, and how to skip wrapping for webhooks, file downloads, and protocol-specific endpoints.</description></item><item><title>NestJS 拦截器与跳过拦截器</title><link>https://www.lihuanyu.com/posts/2023/nestjs%E6%8B%A6%E6%88%AA%E5%99%A8%E4%B8%8E%E8%B7%B3%E8%BF%87%E6%8B%A6%E6%88%AA%E5%99%A8/</link><guid>https://www.lihuanyu.com/posts/2023/nestjs%E6%8B%A6%E6%88%AA%E5%99%A8%E4%B8%8E%E8%B7%B3%E8%BF%87%E6%8B%A6%E6%88%AA%E5%99%A8/</guid><pubDate>Sun, 22 Oct 2023 00:00:00 GMT</pubDate><description>用 NestJS 全局拦截器统一包装成功响应，并通过自定义装饰器为 Webhook、文件下载等接口跳过包装。</description></item><item><title>你好兰州</title><link>https://www.lihuanyu.com/posts/2023/%E4%BD%A0%E5%A5%BD%E5%85%B0%E5%B7%9E/</link><guid>https://www.lihuanyu.com/posts/2023/%E4%BD%A0%E5%A5%BD%E5%85%B0%E5%B7%9E/</guid><pubDate>Fri, 29 Sep 2023 00:00:00 GMT</pubDate><description>记录一次去兰州参加婚礼的短途旅行，从硬卧火车、黄河、牛肉面、博物馆到西北婚礼和城市气质。</description></item><item><title>React key Is Not Just a List Optimization</title><link>https://www.lihuanyu.com/en/posts/2023/react-key-is-not-just-a-list-optimization/</link><guid>https://www.lihuanyu.com/en/posts/2023/react-key-is-not-just-a-list-optimization/</guid><pubDate>Tue, 19 Sep 2023 00:00:00 GMT</pubDate><description>A practical explanation of how React key participates in component identity, why changing it resets state, and when that is the right tool.</description></item><item><title>React 里的 key 不只是列表优化</title><link>https://www.lihuanyu.com/posts/2023/React%E7%9A%84key/</link><guid>https://www.lihuanyu.com/posts/2023/React%E7%9A%84key/</guid><pubDate>Tue, 19 Sep 2023 00:00:00 GMT</pubDate><description>从一次组件重建问题出发，解释 React key 如何参与组件身份判断，以及什么时候适合用 key 重置状态。</description></item><item><title>Mac 磁盘清理工具推荐：先看清楚，再决定删什么</title><link>https://www.lihuanyu.com/posts/2023/Mac%E7%A3%81%E7%9B%98%E6%B8%85%E7%90%86%E5%B7%A5%E5%85%B7%E6%8E%A8%E8%8D%90/</link><guid>https://www.lihuanyu.com/posts/2023/Mac%E7%A3%81%E7%9B%98%E6%B8%85%E7%90%86%E5%B7%A5%E5%85%B7%E6%8E%A8%E8%8D%90/</guid><pubDate>Sat, 16 Sep 2023 00:00:00 GMT</pubDate><description>推荐 OmniDiskSweeper 作为 Mac 磁盘空间分析工具，并补充 Apple 自带存储管理、DaisyDisk、GrandPerspective 等替代方案，以及清理缓存、系统数据和大文件时的风险边界。</description></item><item><title>A SQL Injection Incident Review: NestJS Validation, Logs, and Server-Side Security</title><link>https://www.lihuanyu.com/en/posts/2023/sql-injection-investigation-nestjs/</link><guid>https://www.lihuanyu.com/en/posts/2023/sql-injection-investigation-nestjs/</guid><pubDate>Sun, 20 Aug 2023 00:00:00 GMT</pubDate><description>A practical review of a SQL injection issue found during a Mini Program security test, covering NestJS validation, ORM query safety, PM2 logs, database constraints, and defense in depth.</description></item><item><title>一次 SQL 注入排查复盘：NestJS、日志与服务端安全</title><link>https://www.lihuanyu.com/posts/2023/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1SQL%E6%B3%A8%E5%85%A5%E4%B8%8E%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5/</link><guid>https://www.lihuanyu.com/posts/2023/%E8%AE%B0%E5%BD%95%E4%B8%80%E6%AC%A1SQL%E6%B3%A8%E5%85%A5%E4%B8%8E%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5/</guid><pubDate>Sun, 20 Aug 2023 00:00:00 GMT</pubDate><description>从一次小程序安全测试触发的 SQL 注入排查出发，复盘 NestJS 参数校验、ORM 查询写法、日志定位、数据库约束和服务端安全防线。</description></item><item><title>使用 Cloudflare R2 托管图片</title><link>https://www.lihuanyu.com/posts/2023/%E4%BD%BF%E7%94%A8cloudflare%20R2%E6%89%98%E7%AE%A1%E5%9B%BE%E7%89%87/</link><guid>https://www.lihuanyu.com/posts/2023/%E4%BD%BF%E7%94%A8cloudflare%20R2%E6%89%98%E7%AE%A1%E5%9B%BE%E7%89%87/</guid><pubDate>Sun, 12 Mar 2023 00:00:00 GMT</pubDate><description>已合并至 Cloudflare R2 图床完整方案。</description></item><item><title>小程序页面顶部的空隙</title><link>https://www.lihuanyu.com/posts/2023/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E9%A1%B5%E9%9D%A2%E9%A1%B6%E9%83%A8%E7%9A%84%E7%A9%BA%E9%9A%99/</link><guid>https://www.lihuanyu.com/posts/2023/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E9%A1%B5%E9%9D%A2%E9%A1%B6%E9%83%A8%E7%9A%84%E7%A9%BA%E9%9A%99/</guid><pubDate>Sun, 19 Feb 2023 00:00:00 GMT</pubDate><description>解释小程序页面顶部可滚动空隙背后的 margin 塌陷问题，并比较空元素、BFC 和 overflow 方案的取舍。</description></item><item><title>工程师画图工具：Excalidraw 和技术图表达</title><link>https://www.lihuanyu.com/posts/2022/%E7%94%BB%E5%9B%BE%E5%B7%A5%E5%85%B7-excalidraw/</link><guid>https://www.lihuanyu.com/posts/2022/%E7%94%BB%E5%9B%BE%E5%B7%A5%E5%85%B7-excalidraw/</guid><pubDate>Mon, 26 Sep 2022 00:00:00 GMT</pubDate><description>从 Excalidraw 这款手绘风格画图工具出发，讨论技术文章里的图应该如何帮助读者理解结构、流程、边界和取舍，而不只是让页面看起来热闹。</description></item><item><title>交互的意义</title><link>https://www.lihuanyu.com/posts/2022/%E4%BA%A4%E4%BA%92%E7%9A%84%E6%84%8F%E4%B9%89/</link><guid>https://www.lihuanyu.com/posts/2022/%E4%BA%A4%E4%BA%92%E7%9A%84%E6%84%8F%E4%B9%89/</guid><pubDate>Sun, 25 Sep 2022 00:00:00 GMT</pubDate><description>从电饭煲预约煮粥这件小事出发，讨论好交互为什么不是功能更多，而是把用户需要理解的变量变少，让人用目标语言操作机器。</description></item><item><title>CSS之图片下的空隙与文本居中</title><link>https://www.lihuanyu.com/posts/2022/CSS%E4%B9%8B%E5%9B%BE%E7%89%87%E4%B8%8B%E7%9A%84%E7%A9%BA%E9%9A%99%E4%B8%8E%E6%96%87%E6%9C%AC%E5%B1%85%E4%B8%AD/</link><guid>https://www.lihuanyu.com/posts/2022/CSS%E4%B9%8B%E5%9B%BE%E7%89%87%E4%B8%8B%E7%9A%84%E7%A9%BA%E9%9A%99%E4%B8%8E%E6%96%87%E6%9C%AC%E5%B1%85%E4%B8%AD/</guid><pubDate>Sun, 06 Mar 2022 00:00:00 GMT</pubDate><description>解释图片底部空隙和文本垂直居中偏差背后的 CSS 行内元素、基线、line-height 与字体度量问题。</description></item><item><title>Frontend Dependencies, Lockfiles, and Reproducible Builds</title><link>https://www.lihuanyu.com/en/posts/2022/frontend-dependencies-lockfile-reproducible-builds/</link><guid>https://www.lihuanyu.com/en/posts/2022/frontend-dependencies-lockfile-reproducible-builds/</guid><pubDate>Tue, 11 Jan 2022 00:00:00 GMT</pubDate><description>A practical look at dependency ranges, transitive dependencies, lockfiles, npm ci, pnpm frozen installs, and how frontend projects can make builds more reproducible.</description></item><item><title>前端依赖、lockfile 与可信构建</title><link>https://www.lihuanyu.com/posts/2022/%E5%89%8D%E7%AB%AF%E4%BE%9D%E8%B5%96%E4%B8%8E%E4%BF%A1%E4%BB%BB/</link><guid>https://www.lihuanyu.com/posts/2022/%E5%89%8D%E7%AB%AF%E4%BE%9D%E8%B5%96%E4%B8%8E%E4%BF%A1%E4%BB%BB/</guid><pubDate>Tue, 11 Jan 2022 00:00:00 GMT</pubDate><description>从 npm 依赖版本、传递依赖、lockfile、npm ci 和 pnpm frozen install 出发，整理前端项目如何获得更稳定、可复现的构建结果。</description></item><item><title>21年随笔</title><link>https://www.lihuanyu.com/posts/2021/21%E5%B9%B4%E9%9A%8F%E7%AC%94/</link><guid>https://www.lihuanyu.com/posts/2021/21%E5%B9%B4%E9%9A%8F%E7%AC%94/</guid><pubDate>Thu, 30 Dec 2021 00:00:00 GMT</pubDate><description>记录 2021 年回到成都后的工作、装修、新家、疫情、行业变化、技术状态、读书、换手机和生活节点。</description></item><item><title>Internationalization for Large Mini Programs: Engineering Lessons from Didi</title><link>https://www.lihuanyu.com/en/posts/2020/didi-mini-program-i18n-engineering/</link><guid>https://www.lihuanyu.com/en/posts/2020/didi-mini-program-i18n-engineering/</guid><pubDate>Mon, 31 Aug 2020 00:00:00 GMT</pubDate><description>A review of Didi Mini Program internationalization, covering copy governance, Mini Program runtime constraints, WXS-based translation, cross-platform adaptation, and team workflow.</description></item><item><title>大型小程序国际化实践：滴滴出行 i18n 的工程方法</title><link>https://www.lihuanyu.com/posts/2020/%E6%BB%B4%E6%BB%B4%E5%87%BA%E8%A1%8C%E5%B0%8F%E7%A8%8B%E5%BA%8FI18n%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/</link><guid>https://www.lihuanyu.com/posts/2020/%E6%BB%B4%E6%BB%B4%E5%87%BA%E8%A1%8C%E5%B0%8F%E7%A8%8B%E5%BA%8FI18n%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/</guid><pubDate>Mon, 31 Aug 2020 00:00:00 GMT</pubDate><description>复盘滴滴出行小程序英文版改造，从文案治理、双线程架构、WXS 翻译函数、跨平台适配和协作流程中提炼大型小程序国际化方法论。</description></item><item><title>GitHub Actions Is an Automation Entry Point, Not a Deployment Machine</title><link>https://www.lihuanyu.com/en/posts/2020/github-actions-automation-entry-point-not-deployment-machine/</link><guid>https://www.lihuanyu.com/en/posts/2020/github-actions-automation-entry-point-not-deployment-machine/</guid><pubDate>Sun, 21 Jun 2020 00:00:00 GMT</pubDate><description>A practical review of where GitHub Actions works well, where it becomes the wrong execution environment, and how to draw a cleaner boundary for small project deployments.</description></item><item><title>GitHub Actions 适合做什么，不适合做什么</title><link>https://www.lihuanyu.com/posts/2020/%E4%BB%8ETravis%E8%BF%81%E7%A7%BB%E5%88%B0GitHub-Actions/</link><guid>https://www.lihuanyu.com/posts/2020/%E4%BB%8ETravis%E8%BF%81%E7%A7%BB%E5%88%B0GitHub-Actions/</guid><pubDate>Sun, 21 Jun 2020 00:00:00 GMT</pubDate><description>从 Travis 迁移、npm 自动发布、Docker 镜像构建和博客 webhook 部署改造出发，重新梳理 GitHub Actions 的使用边界。</description></item><item><title>Package Size Governance for Large Mini Programs: Lessons from Didi</title><link>https://www.lihuanyu.com/en/posts/2020/didi-mini-program-package-size-optimization/</link><guid>https://www.lihuanyu.com/en/posts/2020/didi-mini-program-package-size-optimization/</guid><pubDate>Sun, 07 Jun 2020 00:00:00 GMT</pubDate><description>A review of Didi Mini Program package size optimization, covering size budgets, dependency analysis, subpackages, npm dependency placement, and architecture tradeoffs.</description></item><item><title>大型小程序体积治理：滴滴出行的分包、依赖与架构取舍</title><link>https://www.lihuanyu.com/posts/2020/%E6%BB%B4%E6%BB%B4%E5%87%BA%E8%A1%8C%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%BD%93%E7%A7%AF%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/</link><guid>https://www.lihuanyu.com/posts/2020/%E6%BB%B4%E6%BB%B4%E5%87%BA%E8%A1%8C%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%BD%93%E7%A7%AF%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/</guid><pubDate>Sun, 07 Jun 2020 00:00:00 GMT</pubDate><description>复盘滴滴出行小程序包体积优化，从资源压缩、依赖分析、分包治理到封面页方案，整理大型小程序可复用的体积治理方法论。</description></item><item><title>nginx+express做一个简易代理服务</title><link>https://www.lihuanyu.com/posts/2020/nginx-express%E5%81%9A%E4%B8%80%E4%B8%AA%E7%AE%80%E6%98%93%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1/</link><guid>https://www.lihuanyu.com/posts/2020/nginx-express%E5%81%9A%E4%B8%80%E4%B8%AA%E7%AE%80%E6%98%93%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1/</guid><pubDate>Sun, 31 May 2020 00:00:00 GMT</pubDate><description>记录用 Nginx、Express、PM2 和 Let&apos;s Encrypt 搭建一个 HTTPS 代理服务的过程，以及排查 GitHub API 代理超时的细节。</description></item><item><title>npm ci 与稳定依赖安装</title><link>https://www.lihuanyu.com/posts/2020/NPM%E5%B0%8F%E6%8A%80%E5%B7%A7/</link><guid>https://www.lihuanyu.com/posts/2020/NPM%E5%B0%8F%E6%8A%80%E5%B7%A7/</guid><pubDate>Sun, 10 May 2020 00:00:00 GMT</pubDate><description>已并入《前端依赖、lockfile 与可信构建》。</description></item><item><title>小程序开发者，为什么你应该尝试下MPX</title><link>https://www.lihuanyu.com/posts/2019/mpx1/</link><guid>https://www.lihuanyu.com/posts/2019/mpx1/</guid><pubDate>Sun, 26 May 2019 00:00:00 GMT</pubDate><description>从原生兼容、第三方组件支持、按需构建、跨平台编译和性能优化等角度，介绍 MPX 小程序框架的主要优势。</description></item><item><title>Docker for Windows 下的前端热更新问题</title><link>https://www.lihuanyu.com/posts/2017/docker-for-windows%E4%B8%8D%E5%93%8D%E5%BA%94react%E9%A1%B9%E7%9B%AE%E6%94%B9%E5%8F%98%E5%90%8E%E7%9A%84%E9%87%8D%E7%BC%96%E8%AF%91/</link><guid>https://www.lihuanyu.com/posts/2017/docker-for-windows%E4%B8%8D%E5%93%8D%E5%BA%94react%E9%A1%B9%E7%9B%AE%E6%94%B9%E5%8F%98%E5%90%8E%E7%9A%84%E9%87%8D%E7%BC%96%E8%AF%91/</guid><pubDate>Tue, 05 Dec 2017 00:00:00 GMT</pubDate><description>已并入《重新认识 Docker：开发环境、Linux 性能开销与 Redis 实战》。</description></item><item><title>前端项目工程化实践</title><link>https://www.lihuanyu.com/posts/2017/%E5%89%8D%E7%AB%AF%E9%A1%B9%E7%9B%AE%E5%B7%A5%E7%A8%8B%E5%8C%96%E5%AE%9E%E8%B7%B5/</link><guid>https://www.lihuanyu.com/posts/2017/%E5%89%8D%E7%AB%AF%E9%A1%B9%E7%9B%AE%E5%B7%A5%E7%A8%8B%E5%8C%96%E5%AE%9E%E8%B7%B5/</guid><pubDate>Thu, 30 Nov 2017 00:00:00 GMT</pubDate><description>以 Antue 组件库为例，记录前端开源项目接入 Travis CI、lint、测试、构建和 GitHub Pages 自动部署的工程化实践。</description></item><item><title>CORS 下 Cookie 为什么收不到：从 withCredentials 到 SameSite</title><link>https://www.lihuanyu.com/posts/2017/%E8%B0%88%E8%B0%88CORS%E4%B8%8B%E5%89%8D%E7%AB%AF%E7%9A%84cookie/</link><guid>https://www.lihuanyu.com/posts/2017/%E8%B0%88%E8%B0%88CORS%E4%B8%8B%E5%89%8D%E7%AB%AF%E7%9A%84cookie/</guid><pubDate>Sat, 02 Sep 2017 00:00:00 GMT</pubDate><description>CORS 下 Cookie 能不能生效，不只取决于 withCredentials，还取决于服务端 CORS 头、Cookie Domain、SameSite、Secure 和浏览器第三方 Cookie 策略。</description></item><item><title>Why Cookies Fail in CORS: From withCredentials to SameSite</title><link>https://www.lihuanyu.com/en/posts/2017/cors-cookies-credentials-samesite/</link><guid>https://www.lihuanyu.com/en/posts/2017/cors-cookies-credentials-samesite/</guid><pubDate>Sat, 02 Sep 2017 00:00:00 GMT</pubDate><description>CORS cookies depend on more than withCredentials. The server CORS headers, Cookie Domain, SameSite, Secure, and third-party cookie policy all matter.</description></item><item><title>使用 Docker 解决开发环境问题</title><link>https://www.lihuanyu.com/posts/2017/%E4%BD%BF%E7%94%A8Docker%E8%A7%A3%E5%86%B3%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%97%AE%E9%A2%98/</link><guid>https://www.lihuanyu.com/posts/2017/%E4%BD%BF%E7%94%A8Docker%E8%A7%A3%E5%86%B3%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%97%AE%E9%A2%98/</guid><pubDate>Sun, 20 Aug 2017 00:00:00 GMT</pubDate><description>已并入《重新认识 Docker：开发环境、Linux 性能开销与 Redis 实战》。</description></item><item><title>package-lock.json[译]</title><link>https://www.lihuanyu.com/posts/2017/package-lock-json-%E8%AF%91/</link><guid>https://www.lihuanyu.com/posts/2017/package-lock-json-%E8%AF%91/</guid><pubDate>Thu, 10 Aug 2017 00:00:00 GMT</pubDate><description>已并入《前端依赖、lockfile 与可信构建》。</description></item><item><title>vue-cli webpack模板mock数据的方法</title><link>https://www.lihuanyu.com/posts/2017/webpack%E6%A8%A1%E6%9D%BFmock%E6%95%B0%E6%8D%AE%E7%9A%84%E6%96%B9%E6%B3%95/</link><guid>https://www.lihuanyu.com/posts/2017/webpack%E6%A8%A1%E6%9D%BFmock%E6%95%B0%E6%8D%AE%E7%9A%84%E6%96%B9%E6%B3%95/</guid><pubDate>Sun, 09 Jul 2017 00:00:00 GMT</pubDate><description>早期 vue-cli webpack 模板 mock 数据方案的归档页。原方案基于修改 dev-server.js 和 Express 路由，在今天已经不适合作为主要实践参考。</description></item><item><title>排查问题时，不要太早相信第一假设</title><link>https://www.lihuanyu.com/posts/2017/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98%E4%B9%8B%E9%81%93/</link><guid>https://www.lihuanyu.com/posts/2017/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98%E4%B9%8B%E9%81%93/</guid><pubDate>Sat, 08 Apr 2017 00:00:00 GMT</pubDate><description>从一次 Vue 组件事件失效的排查经历出发，讨论为什么排查问题时不要太早相信第一假设，以及如何用控制变量、断点、DOM 身份和版本控制把问题一步步缩小。</description></item><item><title>Hello World</title><link>https://www.lihuanyu.com/posts/2017/hello-world/</link><guid>https://www.lihuanyu.com/posts/2017/hello-world/</guid><pubDate>Fri, 27 Jan 2017 00:00:00 GMT</pubDate><description>记录从 WordPress 迁移到 Hexo 的起点，以及当时对静态博客、服务器维护、CI/CD 和个人写作空间的想法。</description></item><item><title>写了个前端渲染的教程</title><link>https://www.lihuanyu.com/posts/2016/%E5%86%99%E4%BA%86%E4%B8%AA%E5%89%8D%E7%AB%AF%E6%B8%B2%E6%9F%93%E7%9A%84%E6%95%99%E7%A8%8B/</link><guid>https://www.lihuanyu.com/posts/2016/%E5%86%99%E4%BA%86%E4%B8%AA%E5%89%8D%E7%AB%AF%E6%B8%B2%E6%9F%93%E7%9A%84%E6%95%99%E7%A8%8B/</guid><pubDate>Sun, 18 Dec 2016 00:00:00 GMT</pubDate><description>早年前端渲染教程的归档页。原文记录了从后端模板渲染走向 AJAX 与浏览器端渲染时的理解，今天更适合作为前端发展阶段的历史记录阅读。</description></item><item><title>对前后端分离的思考</title><link>https://www.lihuanyu.com/posts/2016/%E5%AF%B9%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB%E7%9A%84%E6%80%9D%E8%80%83/</link><guid>https://www.lihuanyu.com/posts/2016/%E5%AF%B9%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB%E7%9A%84%E6%80%9D%E8%80%83/</guid><pubDate>Sat, 23 Jul 2016 00:00:00 GMT</pubDate><description>结合学校易班轻应用实践，记录从静态页面、Spring Boot 动态网页到前后端分离架构的演进原因和取舍。</description></item></channel></rss>