详解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 相关文章推荐
【消息提示组件】,兼容IE6/7&&FF2
Sep 04 Javascript
js 效率组装字符串 StringBuffer
Dec 23 Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
May 08 Javascript
使用js 设置url参数
Jul 08 Javascript
iScroll中事件点击触发两次解决方案
Mar 11 Javascript
详解JavaScript中的属性和特性
Dec 08 Javascript
对vue中v-on绑定自定事件的实例讲解
Sep 06 Javascript
AJAX在JQuery中的应用详解
Jan 30 jQuery
Node.js中Koa2在控制台输出请求日志的方法示例
May 02 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
Jul 10 jQuery
vue父子组件间引用之$parent、$children
May 20 Javascript
Vue3.0 手写放大镜效果
Jul 25 Vue.js
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
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
Javascript中的delete介绍
2012/09/02 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
一道JS前端闭包面试题解析
2015/12/25 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
easy_install python包安装管理工具介绍
2013/02/10 Python
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
Python如何解除一个装饰器
2020/08/07 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
这段代码难道不该打印出56吗
2013/02/27 面试题
应届生求职自荐信范文
2014/04/07 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
Mysql 如何查询时间段交集
2021/06/08 MySQL
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js