浅谈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 相关文章推荐
实现复选框全选/全不选切换
Dec 23 Javascript
JavaScript中的onerror事件概述及使用
Apr 01 Javascript
javascript实现浏览器窗口传递参数的方法
Sep 03 Javascript
jQuery制作效果超棒的手风琴折叠菜单
Apr 03 Javascript
javascript实现日期按月份加减
May 15 Javascript
JavaScript 常见安全漏洞和自动化检测技术
Aug 21 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
May 24 Javascript
基于javascript实现的购物商城商品倒计时实例
Dec 11 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
Sep 22 jQuery
基于Vue实现拖拽功能
Jul 29 Javascript
Vue 2.0 中依赖注入 provide/inject组合实战
Jun 20 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
Nov 14 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
自动分页的不完整解决方案
2007/01/12 PHP
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
vue实现抖音时间转盘
2019/09/08 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
Python的动态重新封装的教程
2015/04/11 Python
使用Python写CUDA程序的方法
2017/03/27 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Python中pygal绘制雷达图代码分享
2017/12/07 Python
利用python修改json文件的value方法
2018/12/31 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
python实现PID算法及测试的例子
2019/08/08 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
销售业务员岗位职责
2014/01/29 职场文书
关于旅游的活动方案
2014/08/15 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
企业百日安全活动总结
2015/05/07 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
如何在Python中妥善使用进度条详解
2022/04/05 Python