详解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中几种去掉字串左右空格的方法
Dec 25 Javascript
JScript中的undefined和"undefined"的区别
Mar 08 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
Feb 13 Javascript
node.js中的事件处理机制详解
Nov 26 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
Jan 14 Javascript
简单实现jQuery手风琴效果
Aug 18 jQuery
二维码图片生成器QRCode.js简单介绍
Aug 18 Javascript
jQuery模拟爆炸倒计时功能实例代码
Aug 21 jQuery
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
Aug 25 Javascript
在element-ui的select下拉框加上滚动加载
Apr 18 Javascript
详解vue的双向绑定原理及实现
May 05 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
Mar 07 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 download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Python守护线程用法实例
2017/06/23 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
Python autoescape标签用法解析
2020/01/17 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
python 利用zmail库发送邮件
2020/09/11 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
Python实现简单猜数字游戏
2021/02/03 Python
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
应届生的求职推荐信范文
2013/11/30 职场文书
校长就职演讲稿
2014/01/06 职场文书
财务主管岗位职责
2014/02/28 职场文书
团日活动总结书格式
2014/05/08 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
语文教研活动总结
2014/07/02 职场文书