浅谈vue项目如何打包扔向服务器


Posted in Javascript onMay 08, 2018

当我们将 vue 项目完成后,面临的就是如何将项目进行打包上线,放到服务器中。我使用的是 vue-cli(simple) 脚手架,所以就讲一下如何将项目进行打包,并放到 tomcat 上。 

如果是 vue-cli (非 simple 脚手架),这篇文章可能有点帮助。地址链接:vue-cli 如何打包上线

先来描述一下期间遇到的问题有哪些:

1、打包后将 dist 文件夹和 index.html 放到 tomcat,在浏览器中访问时,出现空白页,f12 提示 404。
2、打包好的静态资源均是绝对路径,无法引入进项目,也是 404。

1、项目目录结构

浅谈vue项目如何打包扔向服务器

这是打包后的,所以有 dist 文件夹,打包方式:npm run build。

2、webpack.config.js

浅谈vue项目如何打包扔向服务器

这里只是一小部分,因为这边最关键的就是 publicPath,下面会提,这边可以解决静态资源 404 无法引入的问题。

3、npm run build 打包后的文件

npm run build 打包后生成一个 dist 文件夹,这里面的目录:

浅谈vue项目如何打包扔向服务器

我对 webpack 打包工具的原理不是很清楚,所以文件夹应该生成什么不是了解。我这边是这样子的。主要是一个主要的 build.js, 因为我们的 index.html 引入的就是这个 js 文件。还有一些图片文件和 ElementUI 生成的 ttf 和 woff。

4、如何放到服务器中。

接下来就是需要将生成的 dist 文件夹和 index.html 文件放到服务器中,只需要这两个。首先我将这两个文件放在同一个文件夹中,我命名为 gas(随意)。

浅谈vue项目如何打包扔向服务器

然后将文件夹放到 tomcat 中,我将文件夹放到 tomcat 的 webapps 文件夹目录下:

浅谈vue项目如何打包扔向服务器

浅谈vue项目如何打包扔向服务器

ok 部署完成,启动 tomcat,你会发现显示一个空白页,一些静态资源都是 404。

5、解决空白页和静态资源无法引入的问题。

1、首先空白页的问题,可以重 f12 中看出来都是绝对路径的原因,而我们打包后,应该的引入路径是相对路径,这时我们需要的是修改 index.html 页面。

看一下没改之前的:

浅谈vue项目如何打包扔向服务器

看我 /dist/build.js 引用的是绝对路径,这就导致了在 tomcat 去访问 index.html 页面时,报404。我们需要将路径变成相对路径 ./dist/build/。多一个点,很关键。好了到这里应该主页面可以显示了。

但是你会发现,我的静态资源,我的图片(不包括 img 形式的引入),例如我在 css 中 background:url() 的图片显示404。

2、解决静态资源失效的问题

这就需要修改我们的 webpack.config.js 中的 publicPath 了,默认的 vue-cli 脚手架环境搭建好后,publicPath 是这样的:

浅谈vue项目如何打包扔向服务器

可以看到我们的路径是: /dist/。所以这时候我们如果打开页面,静态资源的路径都会是这样子的,并且报错404:http://10.0.0.181:8088/dist/bg.png?fe9b889cea51978538ce352593be0573

显然可以看出和我们想要的路径不一致,上面我贴出来的在 tomcat 的文件目录中我将 dist 和 index.html 都放进了一个 gas 的文件夹中。所以正确的路径应该是这样的:
http://10.0.0.181:8088/gas/dist/bg.png?fe9b889cea51978538ce352593be0573

看出区别了吗!

解决:

所以我需要改变一下 webpack.config.js 中的输出路径 publicPath: /gas/dist/。将最外层的文件夹路径加进去,这样就可以将静态资源引入进项目了。

ok,到现在为止,最主要的两个问题解决了,一个是 index.html 空白页,另一个是 静态资源路径不正确的问题。

6、index.html 页面中的link 和 srcipt 引用的资源失效问题:

原因还是路径的地址不对:

妥协的解决方法是:将自己引用的资源手动放到打包出来的 dist 文件夹内,然后在 index.html 中按照 dist 的相对路径进行引用。

浅谈vue项目如何打包扔向服务器

代码中的 icon.ico 就是我手动将 icon 图标放到 dist 文件夹中,然后按照对应的引用路径进行引用。其他的 css 和 js 引用一样。

7、待解决的问题:

1、在我的项目中,使用了 ElementUI 框架,但是在打包放到服务器中后,发现按钮样式变了,所有的 padding 失效,所有我只能自己手动进行添加样式。

2、在我的 index.html 中如果引入 link css文件时,还是没办法引入相对路径,所以我将 css 样式都放到了各自的组件中的 style 中了,其他的一般都是用 npm 注入依赖的形式进行安装。

8、网上搜索到的相关问题和解决方法。

1、求助!Vue项目用Webpack打包后放到服务器上,但访问是空白页?弄了好久了也不知道什么原因

2、vue项目中,npm run build生成的index.html文件只有放在根目录下打开才能生效,怎么解决?

3、Vue应用部署到服务器的正确方式

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

Javascript 相关文章推荐
特殊字符、常规符号及其代码对照表
Jun 26 Javascript
理解Javascript_13_执行模型详解
Oct 20 Javascript
JavaScript实现把数字转换成中文
Jun 29 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
AngularJS基础 ng-href 指令用法
Aug 01 Javascript
PhotoSwipe异步动态加载图片方法
Aug 25 Javascript
浅谈jquery上下滑动的注意事项
Oct 13 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 Javascript
ionic 3.0+ 项目搭建运行环境的教程
Aug 09 Javascript
Angular6封装http请求的步骤详解
Aug 13 Javascript
js实现轮播图效果 z-index实现轮播图
Jan 17 Javascript
Vue事件处理原理及过程详解
Mar 11 Javascript
Javascript实现购物车功能的详细代码
May 08 #Javascript
vue-cli 如何打包上线的方法示例
May 08 #Javascript
使用vue-cli打包过程中的步骤以及问题的解决
May 08 #Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
May 08 #Javascript
angularjs实现的购物金额计算工具示例
May 08 #Javascript
Vue微信项目按需授权登录策略实践思路详解
May 07 #Javascript
Vue + better-scroll 实现移动端字母索引导航功能
May 07 #Javascript
You might like
PHPMailer安装方法及简单实例
2008/11/25 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
php定界符
2014/06/19 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
Python修改MP3文件的方法
2015/06/15 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
python 中random模块的常用方法总结
2017/07/08 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
python 实现二维列表转置
2019/12/02 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
C语言笔试集
2012/07/24 面试题
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
通信工程毕业生求职信
2013/11/16 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
房屋出售协议书
2014/04/10 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
十佳少年事迹材料
2014/12/25 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
新店开张宣传语
2015/07/13 职场文书
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android