详解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 相关文章推荐
jQuery 方法大全方便学习参考
Feb 25 Javascript
JS实现商品倒计时实现代码
May 03 Javascript
Jquery选择子控件"大于号"和" "区别介绍及使用示例
Jun 25 Javascript
使用js修改客户端注册表的方法
Aug 09 Javascript
浅谈javascript中的DOM方法
Jul 16 Javascript
javascript获取select标签选中的值
Jun 04 Javascript
plupload+artdialog实现多平台上传文件
Jul 19 Javascript
微信小程序 Storage API实例详解
Oct 02 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
Sep 23 Javascript
js实现批量删除功能
Aug 27 Javascript
JavaScript函数柯里化
Nov 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 __autoload()方法真的影响性能吗?
2012/03/30 PHP
php的dl函数用法实例
2014/11/06 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
详解AngularJS2 Http服务
2017/06/26 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
python实现二分查找算法
2017/09/21 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
python如何统计代码运行的时长
2019/07/24 Python
Django实现跨域请求过程详解
2019/07/25 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
优秀求职信
2014/05/29 职场文书
企业介绍信范文
2015/01/30 职场文书