全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 17 道配套习题

生产环境最佳实践专题

专题说明

本专题介绍 Vite 生产环境部署的最佳实践,帮助开发者优化部署流程与监控体系。

学习目标

  1. 掌握 CDN 部署与资源分发策略
  2. 理解安全策略配置方法
  3. 学会 CI/CD 构建流水线优化与性能监控集成

学习内容

  • CDN 部署与资源分发:静态资源 CDN 配置
  • 安全策略配置:CSP、HTTPS 策略
  • CI/CD 构建流水线优化:构建缓存与并行
  • 构建产物版本管理:产物版本化策略与回滚机制
  • 性能监控集成:构建产物监控与告警

学习建议

实际配置生产环境部署流程,集成性能监控体系。

构建产物版本管理

构建产物的版本化管理是生产环境部署中的关键环节,直接影响灰度发布、快速回滚和问题追溯能力。Vite 本身不内置版本管理,但可以通过构建配置与 CI/CD 流程集成,实现可靠的产物版本化策略。

核心策略

  1. 版本号注入:将版本标识(Git commit hash、CI 构建号、语义版本号)注入到构建产物的文件名或目录结构中。
  2. Manifest 映射:利用 Vite 生成的 manifest 文件建立版本与产物的映射关系,支持多版本并存。
  3. 版本化部署目录:以版本号作为部署目录名,实现原子化切换与秒级回滚。

获取 Git 版本信息

通过 Node.js 脚本在构建时读取 Git 信息,注入到环境变量中:

JavaScript
// scripts/get-version.js
import { execSync } from 'child_process';

const GIT_COMMIT_HASH = execSync('git rev-parse --short HEAD').toString().trim();
const GIT_BRANCH = execSync('git rev-parse --abbrev-ref HEAD').toString().trim();
const BUILD_TIME = new Date().toISOString();

process.stdout.write(JSON.stringify({
  GIT_COMMIT_HASH,
  GIT_BRANCH,
  BUILD_TIME,
}));

Vite 配置中注入版本号

TypeScript
// vite.config.ts
import { defineConfig, loadEnv } from 'vite';
import { execSync } from 'child_process';

function getBuildVersion() {
  const hash = execSync('git rev-parse --short HEAD').toString().trim();
  const time = new Date().toISOString().replace(/[:.]/g, '-');
  return `${time}-${hash}`;
}

export default defineConfig(({ mode }) => {
  const BUILD_VERSION = getBuildVersion();

  return {
    define: {
      __BUILD_VERSION__: JSON.stringify(BUILD_VERSION),
      __BUILD_TIME__: JSON.stringify(new Date().toISOString()),
    },

    build: {
      // 以版本号作为静态资源子目录
      assetsDir: `assets/${BUILD_VERSION}`,

      rollupOptions: {
        output: {
          // 入口文件携带版本号便于多版本共存
          entryFileNames: `js/[name]-${BUILD_VERSION}.js`,
          chunkFileNames: `js/[name]-${BUILD_VERSION}.js`,
          assetFileNames: `assets/[name]-${BUILD_VERSION}.[ext]`,
        },
      },
    },
  };
});

运行时版本暴露

HTML
<!-- index.html -->
<script>
  window.__APP_VERSION__ = '<%= BUILD_VERSION %>';
</script>

配合 Vite 的 transformIndexHtml 钩子替换模板变量:

TypeScript
// vite.config.ts 中追加
plugins: [
  {
    name: 'html-version-inject',
    transformIndexHtml(html) {
      return html.replace(/<%= BUILD_VERSION %>/g, BUILD_VERSION);
    },
  },
],

构建产物版本化目录结构示例

TypeScript
dist/
├── v2026-06-02T10-30-00Z-a1b2c3d/
│   ├── index.html
│   ├── assets/
│   │   └── v2026-06-02T10-30-00Z-a1b2c3d/
│   └── js/
├── v2026-06-01T18-00-00Z-d4e5f6g/
│   ├── index.html
│   ├── assets/
│   └── js/
└── current -> v2026-06-02T10-30-00Z-a1b2c3d/   # 软链接指向当前版本

Manifest 版本记录

Vite 构建默认生成 manifest.json,记录了所有产物文件的映射关系。在多版本部署场景中,应保留每个版本的 manifest 用于问题追溯:

text
// vite.config.ts
build: {
  manifest: true,
},

部署时将该文件与产物一同归档到版本目录,方便回滚后快速确认产物版本状态。

版本管理注意事项

  • 构建时环境一致性:Git hash 依赖 .git 目录存在,Docker 构建时需通过 .dockerignore 保留或通过 CI 环境变量传入。
  • 产物命名长度:过长的版本字符串可能导致文件系统路径超限,建议使用短 hash(--short)并控制前缀长度。
  • 静态资源 CDN 缓存:版本化文件名天然支持缓存更新(内容变化 → 文件名变化 → CDN 自动拉取新文件),无需额外配置缓存策略。
  • 多版本并存清理:建议在 CI/CD 中设置产物保留策略(如保留最近 N 个版本),避免磁盘空间持续增长。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(16 题)

1
单选题

Vite 构建产物部署到 CDN 需要配置哪个选项?

A

build.outDir

B

base 配置为 CDN URL

C

build.assetsDir

D

publicDir

2
多选题

CDN 部署 Vite 构建产物的优势有哪些?

A

全球节点加速资源访问

B

减轻源站服务器压力

C

资源哈希命名支持长期缓存

D

HTTPS 加密传输提升安全

3
多选题

Vite 构建产物命名中哈希的作用是什么?

A

文件内容变化时文件名自动变化

B

支持设置长期缓存策略

C

防止用户加载旧版本缓存

D

增加文件安全性

4
单选题

构建产物版本管理的核心目标是什么?

A

减少构建产物体积

B

支持版本回滚和灰度发布

C

加快构建速度

D

优化加载性能

5
多选题

构建产物版本管理的策略有哪些?

A

按日期或版本号命名产物目录

B

保留多个历史版本便于回滚

C

使用 CDN 配置版本切换

D

自动清理过期版本节省存储

6
多选题

构建产物灰度发布的实现方式有哪些?

A

CDN 按权重分配不同版本流量

B

服务端路由返回不同版本 HTML

C

用户特征判断返回特定版本

D

构建产物中包含灰度逻辑

7
单选题

内容安全策略(CSP)对 Vite 构建产物的主要影响是什么?

A

减少产物体积

B

限制外部资源加载防止 XSS

C

加快资源加载

D

增加构建时间

8
多选题

前端安全策略有哪些?

A

CSP 内容安全策略

B

SRI 子资源完整性校验

C

HTTPS 强制加密传输

D

X-Frame-Options 防止点击劫持

9
多选题

Vite 构建产物如何支持 SRI 子资源完整性?

A

构建时生成 integrity 哈希值

B

HTML 中 script 标签添加 integrity 属性

C

服务端动态生成 integrity

D

配置 build.sri 生成 SRI 属性

10
单选题

前端性能监控主要关注哪些指标?

A

构建产物体积

B

首屏加载时间(FCP/LCP)

C

开发服务器启动时间

D

TypeScript 编译速度

11
多选题

构建产物如何支持性能追踪?

A

构建时注入版本和环境标识

B

Source Map 上传到监控平台

C

构建产物文件名包含版本信息

D

错误日志关联构建版本

12
多选题

Web Vitals 核心指标有哪些?

A

LCP - 最大内容绘制时间

B

FID - 首次输入延迟

C

CLS - 累积布局偏移

D

TTFB - 首字节时间

13
单选题

CI 构建缓存策略的核心目标是什么?

A

减少构建产物体积

B

加速 CI 构建流程减少等待时间

C

增加构建稳定性

D

支持更多并发构建

14
多选题

CI 构建流水线优化策略有哪些?

A

缓存 node_modules 和 .vite 目录

B

并行执行 lint、test、build

C

使用增量构建只构建变化部分

D

分层构建分离依赖安装和构建

15
多选题

Vite 构建在 CI 环境的特殊配置有哪些?

A

禁用 Source Map 减少构建时间

B

设置 CI 环境变量优化构建行为

C

配置构建日志输出便于调试

D

使用 esbuild 替代 terser 加速压缩

16
单选题

Vite 构建产物部署到 CDN 的关键配置是什么?

A

设置 base 配置项指向 CDN URL

B

配置 build.publicPath

C

使用 vite-plugin-cdn

D

修改 rollupOptions 输出路径

← 上一个专题 环境变量与模式专题
下一个专题 → 生态工具链扩展专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库