全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-23 7 分钟 ✍️ juanwangdev

构建产物版本管理

版本管理实现多版本产物共存,支持灰度发布和快速回滚。

版本化产物结构

JavaScript
dist/
├── v1.0.0/
│   ├── index.html
│   └── assets/
├── v1.1.0/
│   ├── index.html
│   └── assets/
└── current → v1.1.0  # 当前版本软链接

配置版本输出

JavaScript
const version = process.env.npm_package_version

export default defineConfig({
  build: {
    outDir: `dist/v${version}`,
    rollupOptions: {
      output: {
        // 资源路径包含版本
        entryFileNames: `assets/[name]-[hash].js`,
        assetFileNames: `assets/[name]-[hash].[ext]`
      }
    }
  }
})

版本标识注入

JavaScript
export default defineConfig({
  define: {
    __APP_VERSION__: JSON.stringify(version),
    __BUILD_TIME__: JSON.stringify(new Date().toISOString())
  }
})

注意:版本标识便于追踪当前运行的版本。

灰度发布配置

Bash
// nginx 配置灰度
location / {
  # 默认新版本
  alias /dist/v1.1.0/;

  # 白名单用户使用旧版本
  if ($http_x_user_group = 'stable') {
    alias /dist/v1.0.0/;
  }
}

回滚策略

JavaScript
# 快速回滚到旧版本
# 修改 current 软链接
ln -sfn dist/v1.0.0 dist/current

# 或修改 nginx alias
# alias /dist/v1.0.0/;

版本产物清理

JavaScript
// 清理旧版本产物
const keepVersions = 3

function cleanOldVersions() {
  const versions = fs.readdirSync('dist')
    .filter(v => v.startsWith('v'))
    .sort()

  // 删除超过保留数量的旧版本
  const toDelete = versions.slice(0, -keepVersions)
  for (const v of toDelete) {
    fs.rmSync(`dist/${v}`, { recursive: true })
  }
}

版本信息 API

YAML
// 版本信息接口
export function getVersionInfo() {
  return {
    version: __APP_VERSION__,
    buildTime: __BUILD_TIME__,
    commit: process.env.GIT_COMMIT
  }
}

版本管理策略

策略说明
多版本共存同时保留多个版本
软链接切换快速切换当前版本
自动清理限制保留版本数量
灰度发布按用户组分配版本

CI/CD 版本集成

text
# GitHub Actions
- name: Build
  run: npm run build
  env:
    GIT_COMMIT: ${{ github.sha }}

- name: Deploy
  run: |
    aws s3 sync dist/v${{ npm_package_version }} s3://bucket/
    # 更新当前版本指针    

要点总结

  • 版本化产物目录支持多版本共存
  • 软链接快速切换当前版本
  • 灰度发布按用户组分配
  • 自动清理控制版本数量

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

← 上一篇 性能监控集成
下一篇 → Astro 静态站点框架
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

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

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