博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue项目编译后部署在非网站根目录的解决方案
阅读量:7100 次
发布时间:2019-06-28

本文共 1367 字,大约阅读时间需要 4 分钟。

背景

同一个生产部署项目,基内外网的访问路径并不相同,内网是基于域名根目录来访问,而外网却指向了一个子目录。

eg. :

vue-router: history模式 内网环境:192.168.1.1:8080/index.html 外网环境:domain.com/ttsd/index.html

由于开发出来的项目是要部署在客户方,且客户并不想单独拿一个域名(或子域)来部署,这时,打包后的程序就要作一些配置方面的修改了。

修改配置文件

1、把打包后的资源引用修改为相对路径 找到config/index.jsbuild属性下的 assetsPublicPath

build: {    ...    assetsPublicPath: './'  // 未修改前的配置为 '/',}复制代码

2、修改样式引用的资源文件(图片、视频、字体文件等)为相对路径 找到
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来获取到当前访问的文件路径,来修改路由。

vue-router里提供了一个的属性

base 类型: string 默认值: "/" 应用的基路径。例如,如果整个单页应用服务在 /app/ 下,然后 base 就应该设为 "/app/"

修改路由代码

function getAbsolutePath () {  let path = location.pathname  return path.substring(0, path.lastIndexOf('/') + 1)}const routers = new Router({  mode: 'history',  base: getAbsolutePath(),  ...})复制代码

至此,打包配置的相关修改已全部完成,项目也能够正常访问。 但还是会有一个问题,跳转到某个路由后,刷新页面,就gg了,页面为空白,此时就要修改nginx的配置了。

修改nginx的配置

官方给的nginx配置是根目录下的,即

location / {  try_files $uri $uri/ /index.html;  // 需要修改为  try_files $uri $uri/ /dist/index.html;}复制代码

注:/dist 根据实际部署的网站目录,修改一下就可以。 个人感觉还可以通过nginx内置的指令去动态获取,在下就不太清楚了。

参考文章:

转载于:https://juejin.im/post/5ae03b98f265da0b8e7f1251

你可能感兴趣的文章
zabbix升级版本过程(7)
查看>>
linux驱动之ioctl
查看>>
我的友情链接
查看>>
jxl导出excel
查看>>
三大WEB服务器对比分析(apache,lighttpd,nginx)
查看>>
redhat nginx 安装
查看>>
WSE convert to ESE, or ESE to WSE.
查看>>
CentOs最小化安装之后安装桌面环境及中文支持
查看>>
加载定义界面
查看>>
SEO基础知识
查看>>
手机通讯录导入工具
查看>>
Java虚拟机精讲之内存分配与垃圾回收
查看>>
hadoop常见命令
查看>>
each用法(网络摘抄)
查看>>
菜鸟也可以自己封装万能ghost系统
查看>>
路由心生
查看>>
【python】 倒序输出字符串
查看>>
Spark 2.x kafka LocationStrategies 的几种方式
查看>>
EntboostChat 1.3发布,iOS开源手机IM,恩布IM
查看>>
细粒度的线程控制?使用Lock Condition~
查看>>