<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vite 专题：从脚手架到生产优化的现代前端构建工程化 on PlumePHP</title><link>https://plumephp.com/posts/vite/</link><description>Recent content in Vite 专题：从脚手架到生产优化的现代前端构建工程化 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 28 Sep 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/posts/vite/index.xml" rel="self" type="application/rss+xml"/><item><title>Vite CI/CD 构建优化：缓存策略、并行构建、产物交付与自动化部署</title><link>https://plumephp.com/vite-ci-cd-optimization/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-ci-cd-optimization/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;Vite 的「快」不只体现在本地开发，&lt;strong&gt;在 CI 里同样可以通过缓存与并行把构建压到几十秒&lt;/strong&gt;。但 CI 环境与本地不同——没有 &lt;code&gt;node_modules&lt;/code&gt;、没有 &lt;code&gt;.vite&lt;/code&gt; 缓存、依赖每次重新安装。本文系统讲 Vite 项目的 CI/CD：先搭一条标准的 GitHub Actions 流水线（安装 → 测试 → 构建 → 部署），再给依赖缓存、构建缓存与分片并行的优化手段，接着讲产物交付（带 hash 的构建产物如何部署到 Vercel / Netlify / GitHub Pages / 对象存储），最后给构建失败排查清单。&lt;/p&gt;</description></item><item><title>Vite HMR 深入：热更新机制、模块边界与自定义 HMR</title><link>https://plumephp.com/vite-hmr-internals/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-hmr-internals/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;HMR（Hot Module Replacement，热模块替换）是 Vite 开发体验的灵魂——改一行代码，浏览器&lt;strong&gt;不刷新&lt;/strong&gt;就更新。但它并非魔法：底层是「模块图 + WebSocket + 边界 accept」。本文从原理讲透 HMR：先拆解一次热更新的完整链路（改文件 → 依赖图计算 → 增量更新 → 边界执行），再讲框架如何自动 accept、手写 &lt;code&gt;import.meta.hot&lt;/code&gt; 自定义热更新、插件侧实现 HMR，最后给出 HMR 失效排查与性能优化，让你从「用 HMR」进阶到「掌控 HMR」。&lt;/p&gt;</description></item><item><title>Vite 中的 Web Worker 与 WASM：并行计算、模块 Worker 与加载优化</title><link>https://plumephp.com/vite-worker-wasm/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-worker-wasm/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;浏览器主线程不能阻塞——&lt;strong&gt;重计算要么分片、要么扔进 Worker&lt;/strong&gt;，而 WASM 能把这些计算跑得接近原生。Vite 对这两者都有&lt;strong&gt;第一方支持&lt;/strong&gt;：Worker 自动打包、WASM 直接 import。本文讲透组合拳：先讲 Vite 原生 Worker 的三种写法（&lt;code&gt;?worker&lt;/code&gt;、&lt;code&gt;new URL&lt;/code&gt;、动态 import）与代码分割，再讲&lt;strong&gt;模块 Worker&lt;/strong&gt;（共享 import 与依赖、避免重复打包），接着讲 Worker 池与通信设计（Transferable、共享内存）、WASM 在 Vite 的加载姿势（&lt;code&gt;?url&lt;/code&gt; + &lt;code&gt;instantiateStreaming&lt;/code&gt;、async）、Worker + WASM 的组合模式（图片处理/加密/编解码），最后给性能权衡与决策（线程 vs 内存 vs 传输）。&lt;/p&gt;</description></item><item><title>Vite 依赖预构建：optimizeDeps 原理、缓存失效与 Monorepo 实战</title><link>https://plumephp.com/vite-dependency-pre-bundling/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-dependency-pre-bundling/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;Vite 启动时会对 &lt;code&gt;node_modules&lt;/code&gt; 里的依赖做一次「预构建」——这是它比传统 bundler 启动快的关键。预构建解决两个问题：&lt;strong&gt;① 兼容 CJS/老包（把 CommonJS 转成 ESM）② 性能（把分散的依赖合并成少量大模块，减少请求数）&lt;/strong&gt;。本文讲透预构建：先拆解 esbuild 扫描与打包的完整流程，再给 &lt;code&gt;optimizeDeps&lt;/code&gt; 配置实战（include/exclude/force），接着讲缓存失效与 &lt;code&gt;.vite&lt;/code&gt; 目录管理，最后覆盖 Monorepo、链接包与动态导入的预构建疑难。&lt;/p&gt;</description></item><item><title>Vite 开发调试与故障排查：devtools、调试工具链与常见问题定位</title><link>https://plumephp.com/vite-devtools-debugging/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-devtools-debugging/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;Vite 报错时最常见的反应是&amp;quot;重启 dev server&amp;quot;——但很多问题重启也没用：&lt;strong&gt;依赖预构建失效、别名没生效、HMR 不更新、sourcemap 对不上&lt;/strong&gt;。本文给一套 Vite 调试工具箱：先讲 dev server 的调试开关（&lt;code&gt;--debug&lt;/code&gt;、&lt;code&gt;--host&lt;/code&gt;、端口、&lt;code&gt;vite&lt;/code&gt; 日志级别），再讲&lt;strong&gt;构建调试&lt;/strong&gt;（&lt;code&gt;vite build --debug&lt;/code&gt;、产物分析、&lt;code&gt;--sourcemap&lt;/code&gt;），接着讲浏览器侧的 sourcemap 与依赖网络、依赖解析问题的定位（预构建目录、&lt;code&gt;optimizeDeps&lt;/code&gt;、别名、&lt;code&gt;resolve.alias&lt;/code&gt;），再讲 HMR 不更新、性能慢（启动/热更新耗时）的定位法，最后给常见报错的系统排查清单。&lt;/p&gt;</description></item><item><title>Vite 微前端集成：Module Federation、qiankun 与 import maps</title><link>https://plumephp.com/vite-micro-frontend/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-micro-frontend/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;多个团队各自独立开发、独立部署，再组合成一个完整应用——&lt;strong&gt;微前端&lt;/strong&gt;解决的是&amp;quot;组织分工&amp;quot;而非&amp;quot;技术炫技&amp;quot;。Vite 的&lt;strong&gt;原生 ESM 架构&lt;/strong&gt;让微前端比 webpack 时代更顺滑：不需要运行时打包器，可以直接共享模块。本文从诉求出发，讲清三种主流方案的取舍（&lt;strong&gt;Module Federation&lt;/strong&gt;、&lt;strong&gt;qiankun&lt;/strong&gt;、&lt;strong&gt;import maps&lt;/strong&gt;），给出 Vite + Module Federation 的完整配置，再讲 qiankun 与 Vite 的兼容坑（这是 Vite 微前端最常踩的点），接着讲样式/路由隔离与共享依赖的版本策略，最后给构建与部署的最佳实践。&lt;/p&gt;</description></item><item><title>Vite 构建缓存与持久化缓存策略：依赖预构建、Rollup 缓存与 CI 加速</title><link>https://plumephp.com/vite-build-cache/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-build-cache/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;Vite 的&amp;quot;快&amp;quot;很大程度建立在&lt;strong&gt;缓存&lt;/strong&gt;上：依赖预构建缓存、esbuild 缓存、Rollup 的模块图缓存——但缓存用错就会&lt;strong&gt;命中了不该命中的、失效了不该失效的&lt;/strong&gt;。本文把 Vite 的缓存体系拆开：先讲三层缓存的职责与存放位置（&lt;code&gt;node_modules/.vite&lt;/code&gt;、&lt;code&gt;node_modules/.cache&lt;/code&gt;、内存），再讲&lt;strong&gt;命中与失效判定&lt;/strong&gt;（为什么改了 package.json 缓存就没了、为什么没改却没命中），接着讲生产构建缓存的现实（&lt;code&gt;vite build&lt;/code&gt; 每次重跑 vs 增量工具）、CI 里的持久化缓存配置（关键！见 /vite-ci-cd-optimization/）、常见坑（&lt;code&gt;.vite&lt;/code&gt; 被误清、缓存目录进 Git），最后给一套缓存治理清单。&lt;/p&gt;</description></item><item><title>Vite 框架集成：React、Vue、Svelte、Solid 与官方插件生态</title><link>https://plumephp.com/vite-framework-integration/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-framework-integration/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;Vite 能成为各框架的「默认构建器」，靠的是&lt;strong&gt;框架插件把 Vite 的通用能力转译成框架语法&lt;/strong&gt;——&lt;code&gt;.vue&lt;/code&gt; 单文件、JSX/TSX、&lt;code&gt;.svelte&lt;/code&gt; 组件、Solid 的响应式编译。本文系统讲框架集成：先说明框架插件做什么（语法转译 + HMR 注入 + 配置预设），再逐个拆解 React / Vue / Svelte / Solid 的集成要点与常见坑，最后给出「选框架插件 + 从零集成」的决策清单，让你能快速为任何框架搭好 Vite 工程。&lt;/p&gt;</description></item><item><title>Vite 测试实战：Vitest 单元测试、组件测试与 E2E 测试</title><link>https://plumephp.com/vite-vitest-testing/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-vitest-testing/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;测试是前端工程化的最后一公里。Vitest 由 Vite 团队打造，&lt;strong&gt;直接复用 Vite 的配置、转换与模块图&lt;/strong&gt;——无需另起炉灶就能为你的 Vite 项目配好单元测试、组件测试与 E2E 测试。本文按「单测 → 组件测 → E2E」三层递进：先讲 Vitest 的核心能力（断言、参数化、快照、Mock），再讲 Vue/React 组件测试的挂载与交互，最后用 Playwright 打通浏览器端到端链路，并给出覆盖率与 CI 集成方案。&lt;/p&gt;</description></item><item><title>Vite 浏览器兼容与 Legacy 构建：build.target、Polyfill 与兼容插件</title><link>https://plumephp.com/vite-compatibility-legacy/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-compatibility-legacy/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;为什么老 IE/旧浏览器打开是白屏？&amp;quot;——Vite 默认的 &lt;code&gt;build.target&lt;/code&gt; 是 &lt;strong&gt;现代浏览器&lt;/strong&gt;（原生 ESM、较新语法），意味着&lt;strong&gt;旧浏览器直接打不开&lt;/strong&gt;。本文讲清 Vite 的兼容策略：先讲 &lt;code&gt;build.target&lt;/code&gt; 与 esbuild 转译的关系（Vite 到底&amp;quot;降级&amp;quot;了什么、没降级什么），再讲现代 vs 遗留的&lt;strong&gt;双构建方案&lt;/strong&gt;（&lt;code&gt;@vitejs/plugin-legacy&lt;/code&gt;：给新浏览器发新包、给老浏览器发兼容包），接着讲 polyfill 的取舍（core-js、Polyfill.io、按需注入），最后给 browserslist 配置、兼容性测试方法（caniuse/真实设备）与一套决策清单。&lt;/p&gt;</description></item><item><title>Vite 环境变量与生产构建最佳实践：import.meta.env、构建模式与产物优化</title><link>https://plumephp.com/vite-env-production-best-practices/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-env-production-best-practices/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;把 Vite 项目从「本地跑通」推到「生产稳跑」，绕不开三个工程问题：&lt;strong&gt;① 环境变量怎么按环境切分（开发/测试/生产/灰度）② 构建模式与 base 路径怎么配（子路径部署、CDN）③ 产物怎么优化（体积、加载、缓存）&lt;/strong&gt;。本文以这三个问题为主线，讲透 &lt;code&gt;import.meta.env&lt;/code&gt; 的完整体系、&lt;code&gt;.env&lt;/code&gt; 文件与模式、&lt;code&gt;vite build&lt;/code&gt; 的模式差异、sourcemap 与产物分析，最后给出一套可落地的生产构建最佳实践清单。&lt;/p&gt;</description></item><item><title>Vite 静态资源与媒体资产处理：图片、字体、SVG 与 Worker</title><link>https://plumephp.com/vite-asset-processing/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-asset-processing/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;Vite 里的静态资源（图片、字体、SVG、Worker）有一套&lt;strong&gt;看似自动、实则有很多开关&lt;/strong&gt;的处理管线：为什么小图会被内联成 Base64、大图会被加 hash、&lt;code&gt;public/&lt;/code&gt; 下的文件又完全不处理？本文把 Vite 的资产管线讲透：先讲 &lt;code&gt;assetsInlineLimit&lt;/code&gt; 与资源哈希的内联/外链决策，再讲图片的正确姿势（&lt;code&gt;publicDir&lt;/code&gt; vs &lt;code&gt;import&lt;/code&gt;、懒加载、压缩），接着讲字体（格式、子集化、&lt;code&gt;font-display&lt;/code&gt;）、SVG（文件 vs 组件 vs 雪碧图）、Worker 的加载（&lt;code&gt;new Worker&lt;/code&gt; 的 Vite 原生支持、模块 Worker），最后给一套资源治理清单与常见排查。&lt;/p&gt;</description></item><item><title>Vite SSR 与服务端渲染实战：从模块图到全栈框架生态</title><link>https://plumephp.com/vite-ssr-frameworks/</link><pubDate>Sun, 27 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-ssr-frameworks/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;SPA 的「白屏等待 JS」让首屏体验与 SEO 始终受制于客户端渲染。Vite 之所以成为新一代全栈框架的地基，正是因为它原生支持 &lt;strong&gt;SSR（服务端渲染）&lt;/strong&gt;——开发期以模块图为驱动提供即时的 SSR + HMR，生产期把同一套源码编译为服务端可执行的 bundle。&lt;/p&gt;</description></item><item><title>Vite 与 Monorepo 多应用架构：pnpm workspace、共享包与构建隔离</title><link>https://plumephp.com/vite-monorepo-architecture/</link><pubDate>Sun, 27 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-monorepo-architecture/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;当组织内有多个前端应用（管理后台、官网、营销页），且它们共享组件库、工具函数、类型定义时，&lt;strong&gt;Monorepo&lt;/strong&gt; 是公认的工程解。但 Monorepo + Vite 组合也有自己的坑：共享包是「源码」还是「产物」？依赖预构建如何避免重复？多应用并行构建如何隔离与缓存？&lt;/p&gt;</description></item><item><title>Vite 插件开发实战：钩子体系、transform 与虚拟模块</title><link>https://plumephp.com/vite-plugin-development/</link><pubDate>Sun, 27 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-plugin-development/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;当 Vite 的配置选项无法满足团队的自定义构建需求时，&lt;strong&gt;插件（Plugin）&lt;/strong&gt; 是唯一的正解。无论是注入构建信息、自动生成路由、解析自定义文件格式，还是拦截与改写模块源码，插件的钩子体系都提供了标准化的接入点。理解插件机制，是「会用 Vite」到「掌控 Vite」的分水岭。&lt;/p&gt;</description></item><item><title>Vite 构建优化与代码分割：从 chunk 策略到加载性能基线</title><link>https://plumephp.com/vite-build-optimization/</link><pubDate>Sun, 27 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-build-optimization/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;开发体验的「快」由 esbuild 与原生 ESM 带来，而生产质量的「优」则由 &lt;strong&gt;Rollup 构建管线&lt;/strong&gt;兑现。很多项目「能跑」但首屏缓慢、加载过多请求、chunk 巨大——根因往往是对构建优化策略的理解不足。Tree Shaking 不是默认魔法，代码分割也不是随便写个 &lt;code&gt;manualChunks&lt;/code&gt; 就完事。&lt;/p&gt;</description></item><item><title>Vite 配置详解与多环境变量管理：defineConfig 全参数实战</title><link>https://plumephp.com/vite-config-guide/</link><pubDate>Sun, 27 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-config-guide/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;Vite 的「零配置可用」是一种体验，而真正让一个项目适应不同团队、不同环境、不同部署拓扑的，是它&lt;strong&gt;灵活而分层&lt;/strong&gt;的配置体系。很多人把 &lt;code&gt;vite.config.ts&lt;/code&gt; 当成一份「抄来的样板」，遇到代理失效、环境变量注入失败、生产路径不对时只能靠猜。&lt;/p&gt;</description></item><item><title>Vite 项目脚手架与工程化起步：从 create-vite 到可维护的前端工程</title><link>https://plumephp.com/vite-scaffold-engineering/</link><pubDate>Sun, 27 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/vite-scaffold-engineering/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;新建一个前端项目的瞬间，开发者通常面临两难：手动搭脚手架要面对「配置地狱」，而全盘依赖模板又容易得到一个难以维护的黑盒。&lt;strong&gt;Vite 的 create-vite&lt;/strong&gt; 提供了一条中间路径——它足够快、足够小，生成的骨架几乎无配置即可运行，同时又足够透明，让开发者可以一步步理解并改造它。&lt;/p&gt;</description></item></channel></rss>