实现前端项目多个版本共存。若是只存在一份资源,会致使每次修改都会影响到全部的用户,对于持续更新的Web项目来讲,须要保证每次的修改只会影响到小部分用户,而不是全部的,控制范围,减小损失。html
项目采用的是git
版本控制前端
原直接以master分支做为production,功能修改完善合并到master上,而后直接在master上编辑提交,线上更新代码。vue
如今修改为:经过分支来控制,并保留多份代码,保留之后老版本修改的可能性webpack
最后达到test.com/v1/,test.com/v2 这种访问效果。nginx
// webpack 编译的配置文件,
// 主要修改时动态改变编译后的文件放置目录,配合Apache控制访问
// 增长版本获取函数 getVersion(),经过匹配当前版本名称,来获取具体的版本号
// 要求,对版本号的命名有格式的要求
var shell = require('shelljs')
var os = require('os')
function getVersion() {
function exec (cmd) {
return shell.exec(cmd, {silent: true}).toString().trim()
}
var releaseName = exec("git branch -vv|grep '*'")
if (os.platform === 'win32') {
releaseName = exec("git branch -vv|findstr '*'")
}
var reg = /\[origin\/release\-v[\d.?]*\]/
if (reg.test(releaseName)) {
var arr = releaseName.match(reg)
return arr[0].replace('[origin/release-', '').replace(/\./g, '').replace(']', '').toString()
}
}
// 修改env配置 和 build下的assetsPublicPath
module.exports = {
build: {
env: {...require('./prod.env'), version: "'" + getVersion() + "'"},
index: path.resolve(__dirname, '../dist/index.html'),
assetsRoot: path.resolve(__dirname, '../dist/'),
assetsSubDirectory: 'static',
assetsPublicPath: '/' + getVersion() + '/',
},
dev: {
env: {...require('./dev.env'), version: "'" + getVersion() + "'"},
}
}
复制代码
// 修改route数组,增长根path路径
mode: 'history',
routes: [
{
path: process.env.NODE_ENV === 'development' ? '/' : ('/' + process.env.version + '/'),
component: xxx,
children: [
...
]
}
]
复制代码
配置Apachegit
当访问test.com/xxx,访问的是实际服务器部署的test目录下xxx/dist/index.html文件web
本来服务器上以后一个test目录,全部的文件都在test目录下,包括编译后的文件vue-router
如今服务器的test目录下有多个文件,若是vxx1, vxx2,根据实际的路由状况,访问到具体的目录下,若是有必要shell
// vue-router 中有beforeEach
router.beforeEach((to, from, next) => {
// 经过代码进行实际的访问控制
})
复制代码
具体的要求还须要具体的去看,若是有什么更好的方式,或者哪里有问题,请留言~~数组