详解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 window.opener返回父页面的应用
Oct 24 Javascript
jquery $(document).ready()和window.onload的区别浅析
Feb 04 Javascript
一波JavaScript日期判断脚本分享
Mar 06 Javascript
Javascript基础教程之比较null和undefined值
May 16 Javascript
JavaScript暂停和继续定时器的实现方法
Jul 18 Javascript
JavaScript易错知识点整理
Dec 05 Javascript
Angular2使用jQuery的方法教程
May 28 jQuery
vue.js配合$.post从后台获取数据简单demo分享
Aug 11 Javascript
详解vue引入子组件方法
Feb 12 Javascript
JS将时间秒转换成天小时分钟秒的字符串
Jul 10 Javascript
关于JavaScript回调函数的深入理解
Jun 27 Javascript
详解JS数组方法
Nov 20 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使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
php多线程并发实现方法
2016/09/30 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
python中dir函数用法分析
2015/04/17 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
金宝贝童装官网:Gymboree
2016/08/31 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
优秀的教师个人的中文求职信
2013/09/21 职场文书
三问三解心得体会
2014/09/05 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
安全先进个人材料
2014/12/29 职场文书
白银帝国观后感
2015/06/17 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
Feign调用传输文件异常的解决
2021/06/24 Java/Android
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫