详解Vue前端生产环境发布配置实战篇


Posted in Javascript onMay 07, 2019

前言

首先这篇文章是写给Vue新手的,老司机基本不用看了。

当我们刚接触vue的时候,特别是对于第一次用前端框架的同学来说,心情可以说是比较激动的,框架带来的种种新体验,是以前jQuery无法给你的兴奋和满足感。但是在体验了几个demo的新鲜感之后,我们就要考虑如何把框架结合到我们实际的开发中如何应用的问题了。

下面我主要总结三个和生产发布相关的问题:资源文件发布文件夹配置,图片文件的引用,以及后台接口调试方法。

一,资源文件发布配置

一般项目都是用vue-cli脚手架搭建项目,然后编写自己的代码。vue-cli脚手架生成的配置,默认资源文件都在static文件夹下面,build发布的js和css文件也是在static文件夹下面,index.html文件则是和static形成相对路径关系。

而实际我们的生产发布环境中,页面文件和资源文件不一定在同一目录下,页面文件和js,css文件也不在同一目录下。

以php的Yii2环境为例,页面文件一般都放在views文件夹,页面访问路径可能是 “http://xxxx.com/index.php/sales-task/create ” 这样的url形式。而js,css,image等资源文件则需要放在web文件夹下,访问路径则是从根目录开始访问的。如果在web目录下新建static文件夹,访问路径是 “http://freelancer-xxxx.s3-website-us-east-1.amazonaws.com/index.html” 这样的url形式。实际开发中我们不能把所有项目资源文件都放在web目录下的static文件夹,需要按项目新建不同的文件夹,在每个项目文件夹里再新建js,css,images等文件夹来安放各自的资源文件,访问路径应该是 “http://freelancer-xxxx.s3-website-us-east-1.amazonaws.com/index.html ” 这样的url形式。

因此修改配置文件如下:

  1. 把vue项目下的static文件夹名称改成项目名称,名称由小写英文字母,横杠连接符“-”,数字组成,例如sales-task。
  2. 修改config/index.js,把dev和build属性里的assetsSubDirectorys的值都改成项目名称,例如sales-task。build的assetsPublicPath值改成“/”,这样所有资源文件的引用都从根目录引用,避免相对路径错误。
  3. 修改build/webpack.dev.conf.js,把plugins的new CopyWebpackPlugin那里的from: path.resolve(__dirname, '../static'),改为from: path.resolve(__dirname, '../sales-task')。
  4. build/webpack.prod.conf.js里也做同样的修改。
  5. 上线前发布最终线上文件时,config/index.js里的build设置属性productionSourceMap: false,同时注释掉devtool: '#source-map',以避免产生.map映射文件。正式上线前这个还是要保留的,否则调试代码会很不方便。

二,图片文件的引用方式

vue项目中有2种图片引用方式,一种是静态引用,按照我们上面的资源文件夹配置,图片路径直接写到template的html代码里,格式示例:

<img src="/sales-task/images/logo.png">

这样在开发模式和发布模式下都能正常引用到图片,好处是和正常html代码格式一样,方便代码的编写和修改。缺点是图片文件地址是静态的,替换图片后如果不手动更换文件名无法解决缓存问题。

另一种方法就是更科学的模块化方式,用require引用图片,这样发布后图片文件名也会生成唯一识别码,图片修改后就会重新生成不同的文件名,从而能避免缓存问题,另外小图片还可以直接生成base64码,减少文件请求。require引用也有两种形式,直接写在:src属性上(注意这里和静态引用不一样,不是src而是:src了):

<img :src="require('../assets/images/logo.png')">

或者把图片引用数据写在data绑定数据里:

<img :src="logoImg">
...
<script>
export default
 {
  data()
  {
   return {
    logoImg:require('../assets/images/logo.png')
   }
  }
 }
</script>

当然我还是推荐绑定数据的方法,代码看起来更清爽,也便于维护。

另外需要说明的是在vue的<style></style>块内的样式里定义的background-image引用图片不需要require引用,直接通过相对路径引入就可以实现上面相同的效果。

三,后台接口调试方法

这里后台接口调试指的是在开发模式下的调试。

vue的开发模式是通过webpack-dev-server启动一个本地服务,所以在开发模式下调用后台接口就产生了跨域问题。这里要说明一下,如果要调用的后台接口本身就是跨域的接口,也就是说页面和接口文件不在同一个域名下,跨域问题需要在后端设置,这时其实vue项目不需要特殊配置了,因为本地访问和发布后访问都是跨域的,解决后端跨域就都解决了。所以我们这里要配置的,还是针对发布以后页面和接口不存在跨越问题,只是开发模式下本地服务和接口产生的跨越问题,如何解决。

首先还是打开config/index.js,找到module.exports里的dev,里面有一项proxyTable,默认是空的,我们要按照我们的接口路径,修改如下:

proxyTable: {
    '/sales-task-api':{
      target:"http://xxxxx.com/sales-task-api",
      changeOrigin:true,
      pathRewrite: {"^/sales-task-api" : "/"} 
    }
  }

注意上面3个地方的接口路径名称(示例中的"sales-task-api")要保持一致。

例如实际要调用的接口地址是:http://xxxxx.com/sales-task-api/get-user-list ,经过这样配置设置后,我们在vue中就可以通过 "/sales-task-api/get-user-list" 这样的地址调用,也不会产生跨域问题。同时因为是采用的根目录访问路径,在生产发布以后也不会产生接口访问路径错误问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个js写的日历(代码部分网摘)
Sep 20 Javascript
页面中js执行顺序
Nov 09 Javascript
javascript学习笔记(五) Array 数组类型介绍
Jun 19 Javascript
JQuery跳出each循环的方法
Apr 16 Javascript
实例讲解避免javascript冲突的方法
Jan 03 Javascript
基于jQuery Tipso插件实现消息提示框特效
Mar 16 Javascript
jQuery简单验证上传文件大小及类型的方法
Jun 02 Javascript
AngularJs ng-route路由详解及实例代码
Sep 14 Javascript
详解angularJs指令的3种绑定策略
Apr 13 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 Javascript
vue 实现全选全不选的示例代码
Mar 29 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
Apr 08 Javascript
7个好用的JavaScript技巧分享(译)
May 07 #Javascript
微信小程序实现获取用户信息并存入数据库操作示例
May 07 #Javascript
vue搜索和vue模糊搜索代码实例
May 07 #Javascript
详解Vue demo实现商品列表的展示
May 07 #Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
May 07 #Javascript
Vue Echarts实现可视化世界地图代码实例
May 07 #Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
May 07 #Javascript
You might like
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
javascript使用activex控件的代码
2011/01/27 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
js中字符型和数值型数字的互相转化方法(必看)
2017/04/25 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
详解Python pygame安装过程笔记
2017/06/05 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
中学生爱国演讲稿
2014/09/05 职场文书
2015新学期家长寄语
2015/02/26 职场文书
60句有关成长的名言
2019/09/04 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
使用pandas模块实现数据的标准化操作
2021/05/14 Python
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android