详解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 巧妙获取剪贴板数据 Excel数据的粘贴
Jul 09 Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
Nov 08 Javascript
JS获取计算机mac地址以及IP的实现方法
Jan 08 Javascript
星期几的不同脚本写法(推荐)
Jun 01 Javascript
jQuery绑定事件的四种方式介绍
Oct 31 Javascript
JS创建对象的写法示例
Nov 04 Javascript
微信小程序开发之map地图实现教程
Jun 08 Javascript
vue二级路由设置方法
Feb 09 Javascript
聊聊JS动画库 Velocity.js的使用
Mar 13 Javascript
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
Nov 06 Javascript
jquery实现下载图片功能
Jul 18 jQuery
vue 实现滚动到底部翻页效果(pc端)
Jul 31 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
社区(php&&mysql)二
2006/10/09 PHP
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
Chrome Web App开发小结
2014/09/04 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
理解JS绑定事件
2016/01/19 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python自动重试HTTP连接装饰器
2015/04/28 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
专科文秘应届生求职信
2013/11/18 职场文书
关于旷工的检讨书
2014/02/02 职场文书
作文评语集锦
2014/12/25 职场文书
2015年安全生产责任书
2015/01/30 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server