同一个生产部署项目,基内外网的访问路径并不相同,内网是基于域名根目录来访问,而外网却指向了一个子目录。javascript
eg. :html
vue-router: history模式 内网环境:192.168.1.1:8080/index.html 外网环境:domain.com/ttsd/index.htmlvue
因为开发出来的项目是要部署在客户方,且客户并不想单独拿一个域名(或子域)来部署,这时,打包后的程序就要做一些配置方面的修改了。java
一、把打包后的资源引用修改成相对路径 找到config/index.js
中build
属性下的 assetsPublicPath
webpack
build: {
...
assetsPublicPath: './' // 未修改前的配置为 '/',
}
复制代码
build/utils.js
中,添加(或修改)
publicPath
为
'../../'
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader',
publicPath: '../../' // 修改路径
})
} else {
return ['vue-style-loader'].concat(loaders)
}
复制代码
在路由的history模式下,全部的路由都是基于根路径的,如/xxxx
,因为部署目录未知,因此咱们能够根据location.pathname
来获取到当前访问的文件路径,来修改路由。nginx
vue-router里提供了一个base的属性web
base 类型:
string
默认值:"/"
应用的基路径。例如,若是整个单页应用服务在/app/
下,而后base
就应该设为"/app/"
。vue-router
修改路由代码vue-cli
function getAbsolutePath () {
let path = location.pathname
return path.substring(0, path.lastIndexOf('/') + 1)
}
const routers = new Router({
mode: 'history',
base: getAbsolutePath(),
...
})
复制代码
至此,打包配置的相关修改已所有完成,项目也可以正常访问。 但仍是会有一个问题,跳转到某个路由后,刷新页面,就gg了,页面为空白,此时就要修改nginx的配置了。api
官方给的nginx配置是根目录下的,即router.vuejs.org/zh-cn/essen…
location / {
try_files $uri $uri/ /index.html;
// 须要修改成
try_files $uri $uri/ /dist/index.html;
}
复制代码
注:/dist
根据实际部署的网站目录,修改一下就能够。 我的感受还能够经过nginx内置的指令去动态获取,在下就不太清楚了。