详解Vue项目编译后部署在非网站根目录的解决方案


Posted in Javascript onApril 26, 2018

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

eg. :

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

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

修改配置文件

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

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

详解Vue项目编译后部署在非网站根目录的解决方案

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)
}

详解Vue项目编译后部署在非网站根目录的解决方案 

修改路由

在路由的history模式下,所有的路由都是基于根路径的,如 /xxxx ,由于部署目录未知,所以我们可以根据 location.pathname 来获取到当前访问的文件路径,来修改路由。

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

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配置是根目录下的,即 https://router.vuejs.org/zh-cn/essentials/history-mode.html#nginx

location / {
 try_files $uri $uri/ /index.html;

 // 需要修改为
 try_files $uri $uri/ /dist/index.html;
}

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 程序执行与顺序实现详解
May 13 Javascript
jQuery标签替换函数replaceWith()的使用例子
Aug 28 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
js如何判断输入字符串长度
Dec 16 Javascript
js与jquery分别实现tab标签页功能的方法
Nov 18 Javascript
js 显示日期时间的实例(时间过一秒加1)
Oct 25 Javascript
详解用Node.js写一个简单的命令行工具
Mar 01 Javascript
element-ui 限制日期选择的方法(datepicker)
May 16 Javascript
json数据传到前台并解析展示成列表的方法
Aug 06 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
May 02 Javascript
vue如何搭建多页面多系统应用
Jun 17 Javascript
js实现点击选项置顶动画效果
Aug 25 Javascript
vue如何判断dom的class
Apr 26 #Javascript
vue 中filter的多种用法
Apr 26 #Javascript
vue自定义filters过滤器
Apr 26 #Javascript
JavaScript实现微信红包算法及问题解决方法
Apr 26 #Javascript
react 创建单例组件的方法
Apr 26 #Javascript
node打造微信个人号机器人的方法示例
Apr 26 #Javascript
Vue 使用中的小技巧
Apr 26 #Javascript
You might like
PHP5函数小全(分享)
2013/06/06 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
Javascript中的 “&” 和 “|” 详解
2017/02/02 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
写给小白看的JavaScript异步
2017/11/29 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
Django 反向生成url实例详解
2019/07/30 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
Python项目跨域问题解决方案
2020/06/22 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
线程同步的方法
2016/11/23 面试题
校长岗位职责
2013/11/26 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
音乐器材管理制度
2014/01/31 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
网络研修随笔感言
2015/11/18 职场文书
高中团支书竞选稿
2015/11/21 职场文书
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL