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

前言

首先这篇文章是写给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代码里,格式示例:

?


1

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

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

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

?


1

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

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

<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,默认是空的,我们要按照我们的接口路径,修改如下:

?


1

2

3

4

5

6

7

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" 这样的地址调用,也不会产生跨域问题。同时因为是采用的根目录访问路径,在生产发布以后也不会产生接口访问路径错误问题。

 
HTML5跨平台开发实战视频教程+源码+笔记 
web前端开发模拟面试
撩课Vue2.X+Node.Js 拼多多商城项目实战  ...2
React16.8+Redux 企业级项目实战  ...2
JS数据结构&算法教程  ...2
Yeoman和Grunt使用入门教程   ...2
web前端开发进阶之深入React源码视频教程   ...2
Nodejs+WebSocket+Html5全栈视频教程  ...2
vue多端跨平台框架开发视频教程  ...23
JS实例游戏开发视频教程  ...2
React源码实例开发视频教程  ...23
精通 WebGL+Three.Js 视频教程  ...23
VUE源码和高级特性视频教程  ...23
ECMAScript es6新功能讲解视频教程  ...234
CDN前端调优+缓存分布式开发课程  ...234
尚硅谷Zepto技术视频教程  ...23
美团+QQ音乐+微博项目开发实战视频教程  ...23
黑马VueJs视频教程  ...234
web前端开发性能优化视频教程  ...2345

下一页 »

原文地址:https://www.cnblogs.com/alettarit/p/10829074.html

时间: 2024-08-28 08:39:36

详解Vue前端生产环境发布配置实战篇的相关文章

Web Material-UI 详解(一) 环境搭建与Helloword

Web Material-UI 详解(一) 环境搭建与Helloword 版权声明:转载必须注明本文转自严振杰的博客: http://blog.yanzhenjie.com 今天介绍一款实现Material Design的开源项目Material-UI,它是一组用来实现Google的Material Design设计规范的React组件,它是一个前端js框架,主要用在web领域,今天主要带领大家认识一下它的面貌,并且实现一个Helloword. Google Material Design官网:

详解vue 路由跳转四种方式 (带参数)

详解vue 路由跳转四种方式 (带参数):https://www.jb51.net/article/160401.htm 1.  router-link ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1. 不带参数  <router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}"> //name,path都行, 建议用name /

跨平台:GN实践详解(ninja, 编译, windows/mac/android实战)

跨平台:GN实践详解(ninja, 编译, windows/mac/android实战)展开目录一.概览二.跨平台代码编辑器三.GN入门四.示范工程五.关键细节六.结语 [编译器选项] 其中前两部分是前缀部分,原本没有跨平台构建经验和知识的同学可以借助来帮助理解,后四部分则是讲述GN工程的基本结构.如何搭建一个GN构建的工程.以及关键的一些GN知识 一.概览如何开始这个话题是我比较在意的,因为对于部分人而言,真正从思维和理解上切入这篇文章真正要阐述的点是有困难的.这在于跨平台编译和开发这块,如果

CentOS(5.8/6.4)linux生产环境若干优化实战

CentOS(5.8/6.4)linux生产环境若干优化实战 CentOS系统安装之后并不能立即投入生产环境使用,往往需要先经过我们运维人员的优化才行.在此讲解几点关于Linux系统安装后的基础优化操作. 注意:本次优化都是基于CentOS(5.8/6.4).关于5.8和6.4两者优化时的小区别,我会在文中提及的. 优化条目: 修改ip地址.网关.主机名.DNS等 关闭selinux,清空iptables 添加普通用户并进行sudo授权管理 更新yum源及必要软件安装 定时自动更新服务器时间 精

Hadoop生产环境的配置

生产环境的搭建 主机规划 这里我们使用5 台主机来配置Hadoop集群. djt11/192.168.3.11 djt17/192.168.3.12 djt13/192.168.3.13 djt14/192.168.3.14 djt15/192.168.3.15 namenode 是 是 否 否 否 datanode 否 否 是 是 是 resourcemanager 是 是 否 否 否 journalnode 是 是 是 是 是 zookeeper 是 是 是 是 是 Journalnode和

redis概述,特点,与Memached的不同,生产环境主从配置,redis配置文件解析

Redis概述: 是一个基于Key-Value的持久化数据库存储,支持丰富的数据类型,用C语言编写,可基于内存又可持久化的日志型.Key-Value数据库,并提供多种语言的API Redis特点 1.Key-Value健值类型存储 2.支持数据可靠存储及落地 3.单进程单线程高性能服务器 4.单机qps(每秒查询率)可以达到10w 5.适合小数据量高速读写访问 Redis跟Memached的不同 1.Redis可以持久化数据存储 2.性能高很,Redis能支持超过10W每秒的读写频率 3.丰富的

【WebService】wsdl配置详解以及使用注解修改wsdl配置

WebService系列文章: [WebService]带你走进webservice的世界 [WebService]自定义WebService服务及其调用 前面分析了一下关于ws的基本知识,我们知道,wsdl是ws中很重要的文档,我们可以通过解析该wsdl文档获取ws的相关信息,其实,如果不了解该文档结构的话,问题也不大,只要会解析即可进行开发.但是如果想要生成一个符合自己项目的,或者比较人性化的一个wsdl的话,或者从可读性角度来说,就需要在编写ws代码时进行一些相应的配置了,比如说ws名称,

详解vue如何使用rules对表单字段进行校验

1.在代码中,添加属性::rule ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <Form ref="loginForm" :model="form" :rules="rules" @keydown.enter.native="handleSubmit" class="form-con">            <FormItem prop

详解“FTP文件传输服务”安装配置实例

"FTP文件传输服务"安装配置实例 家住海边喜欢浪:zhang789.blog.51cto.com 目录 简介 ftp工作原理 常见的FTP服务 Vsftpd服务器的安装 Vsftpd.conf配置文件详解 配置FTP服务器实例 实例:配置匿名用户 实例:配置本地用户登录 实例:配置虚拟用户登录(MySQL认证) 实例:控制用户登录 实例:设置欢迎信息 分析vsftpd日志管理 FTP服务器配置与管理 简介 FTP 是File Transfer Protocol(文件传输协议)的英文简