详解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 相关文章推荐
在JavaScript中监听IME键盘输入事件
May 29 Javascript
jquery next nextAll nextUntil siblings的区别介绍
Oct 05 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
Jun 03 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
Oct 05 Javascript
JS实现多物体运动的方法详解
Jan 23 Javascript
vue中过滤器filter的讲解
Jan 21 Javascript
Vue中Axios从远程/后台读取数据
Jan 21 Javascript
使用vuex解决刷新页面state数据消失的问题记录
May 08 Javascript
通过扫小程序码实现网站登陆功能
Aug 22 Javascript
layui 弹出层回调获取弹出层数据的例子
Sep 02 Javascript
JS轮播图的实现方法2
Aug 25 Javascript
Vue2.0 ES6语法降级ES5的操作
Oct 30 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+JS+rsa数据加密传输实现代码
2011/03/23 PHP
php的一个简单加密解密代码
2014/01/14 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
Python实现的异步代理爬虫及代理池
2017/03/17 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
python线程的几种创建方式详解
2019/08/29 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
python数字类型math库原理解析
2020/03/02 Python
python如何运行js语句
2020/09/09 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
html5.2 dialog简介详解
2018/02/27 HTML / CSS
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
店长岗位职责
2013/11/21 职场文书
研究生毕业鉴定
2014/01/29 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
岗位职责风险点
2014/03/12 职场文书
电力培训心得体会
2014/09/02 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python