详解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中的集合及效率
Jan 08 Javascript
jQuery的观察者模式详解
Dec 22 Javascript
jfinal与bootstrap的登录跳转实战演习
Sep 22 Javascript
将 vue 生成的 js 上传到七牛的实例
Jul 28 Javascript
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
JavaScript实现数值自动增加动画
Dec 28 Javascript
Bootstrap-table自定义可编辑每页显示记录数
Sep 07 Javascript
Vue一个案例引发的递归组件的使用详解
Nov 15 Javascript
微信小程序全局变量功能与用法详解
Jan 22 Javascript
Vue 实现从文件中获取文本信息的方法详解
Oct 16 Javascript
Angular 多模块项目构建过程
Feb 13 Javascript
JS实现斐波那契数列的五种方式(小结)
Sep 09 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获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
深入php多态的实现详解
2013/06/09 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
浅谈PHP进程管理
2019/03/08 PHP
JavaScript 反科里化 this [译]
2012/09/20 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
JavaScript实现自动切换图片代码
2016/10/11 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
python调用fortran模块
2016/04/08 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
django 类视图的使用方法详解
2019/07/24 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
python中format函数如何使用
2020/06/22 Python
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
档案接收函范文
2014/01/10 职场文书
服务员自我评价
2014/01/25 职场文书
《狼》教学反思
2014/03/02 职场文书
小班评语大全
2014/05/04 职场文书
525心理活动总结
2014/07/04 职场文书
老干部工作先进事迹
2014/08/17 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
辞职书格式样本
2015/02/26 职场文书
2015年教师节慰问信
2015/03/23 职场文书
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL