构建产物版本管理
版本管理实现多版本产物共存,支持灰度发布和快速回滚。
版本化产物结构
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/
# 更新当前版本指针
要点总结
- 版本化产物目录支持多版本共存
- 软链接快速切换当前版本
- 灰度发布按用户组分配
- 自动清理控制版本数量
📝 发现内容有误?点击此处直接编辑