浅谈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 相关文章推荐
jQuery 技巧大全(新手入门篇)
May 12 Javascript
js或css实现滚动广告的几种方案
Jan 28 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
Apr 07 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
Dec 09 Javascript
JS实现点击链接取消跳转效果的方法
Jan 24 Javascript
JS弹性运动实现方法分析
Dec 15 Javascript
Javascript中return的使用与闭包详解
Jan 11 Javascript
vue获取form表单的值示例
Oct 29 Javascript
使用zrender.js绘制体温单效果
Oct 31 Javascript
JS常见内存泄漏及解决方案解析
May 30 Javascript
Vue 封装防刷新考试倒计时组件的实现
Jun 05 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
Aug 17 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
node.js express框架简介与实现
2019/07/23 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
Python编写登陆接口的方法
2017/07/10 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
利用python 读写csv文件
2020/09/10 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
自我反省检讨书
2014/01/23 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
小学老师对学生的评语
2014/12/29 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS