详解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代码
Nov 29 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
Nov 25 Javascript
jQuery简单实现提交数据出现loading进度条的方法
Mar 29 Javascript
javascript 用函数实现继承详解
May 28 Javascript
jQuery UI结合Ajax创建可定制的Web界面
Jun 22 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
Aug 24 Javascript
jQuery实现字符串全部替换的方法
Dec 12 Javascript
ES6新特性五:Set与Map的数据结构实例分析
Apr 21 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
Mar 15 Javascript
vue单页面在微信下只能分享落地页的解决方案
Apr 15 Javascript
100行代码实现vue表单校验功能(小白自编)
Nov 19 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
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
php学习之 认清变量的作用范围
2010/01/26 PHP
php 操作符与控制结构
2012/03/07 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
浅析Ajax语法
2016/12/05 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
Face++ API实现手势识别系统设计
2018/11/21 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
python绘制随机网络图形示例
2019/11/21 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
如何安装ruby on rails
2014/02/09 面试题
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python