最近要把vue脚手架开发的一个项目上线,只知道vue脚手架是基于node的服务端项目,那么只需要 npm run dev 就可以轻松启动整个项目,当我想当然的给服务器配置合适的node环境(这里也遇到了坑,服务器系统对node版本的兼容性等),然后想当然的把整个项目源文件拷贝到服务器上,满心欢喜地去线上测试~~

悲剧发生了,停在启动页(首页)迟迟没有反应。我嘞个去,一看network请求,app.js这个被webpack打包的引用依赖文件足足14.7M,我的天,我用的测试服务器只有1M的带宽,也就是说客户机网络足够快,再忽略掉传输损耗等因素,这个页面也得加载十几秒(理想状态下)。实际的情况是一两分钟之后app.js才能加载完成,开始首页渲染。这肯定是不能接受的情况。

怎么解决呢?我的踩坑过程是这样的(如果是一步到位看最终解决方案,请跳过,直接看最后一部分)

1.找寻webpack打包app.js的原理和优化方案,没想到网上遇到这种情况的还挺多,

于是乎,就按照上面的方案去做,把vue\vue-resouce、vue-router等取消本地依赖打包,换成静态资源外链的形式,当然也用了路由懒加载,app.js突飞猛进缩小到了8M,但是还是不行啊,加载时间还是1min左右。当时的目标是能缩减到2M左右,这样作为开发者的我还算能接受,用户能不能接受我就不知道了。哈哈哈。

项目中用到了echart和v-chart这两个东西比较大。感觉肯定吃掉了我很大的空间,预示就想把他们外链出去,想法是对的,但是v-charts的外链依然碰壁连连。确实这样做貌似也看到了曙光,app.js可以缩小到3M,但是v-charts在项目中不起作用了,所以说我可能看到的只是假象。

2.基于前面的尝试,让我觉得应该寄希望于webpack打包机制,于是乎做好了啃新的准备,看了一上午,把代码优化到7M左右,效果不明显啊!

我甚至觉得我之前的依赖有多余的吧,要不要精简一下,但是不好下手,删一个就报错。准备重构项目了!又去安装了脚手架的3.0版,哎,3.0.和2.0还是差别蛮大的,也是一鼻子灰。

然后就是最后的解决方法了,其实就是一个误区啦!!(稍后更新)

3.误区解读:其实vue脚手架本身就提供两种模式 开发模式&生产模式  也就是npm run dev&npm run build;我们发布版本上线的时候是要用生产模式,打包之后的文件目录格式是这样的:

生成dist文件夹就是你可以直接放到服务器上的文件,其中包括了静态资源文件,还有那些依赖文件都已经打包进index.html并且进行了压缩。

值得注意的是当你用build打包的时候有个地方的配置需要改一下:看下图

这两个地方之前是原本静态资源的相对路径,因为打包完之后index和static文件夹在同一目录下,所以改成当前路径。

一直以来的误区就是脚手架必须依赖与node环境,实际不然,只是开发模式,发布之后就是普通的html,可以跑在之前的服务器下。

这样一来,你会发现app.js和vendor.js都不过几百K的大小,一般超不过1M,运行速度大大提高。

上面说到的vue脚手架其实不准确,应该是基于vue脚手架和elementui的开源后台管理项目vueAdmin!(并非原生的vue脚手架,不过除了启动命令没太大区别,原生命令看这里)在GitHub 上有源码。

基于vue脚手架的项目打包上线(发布)方法和误区的更多相关文章

  1. 从零开始搭建vue移动端项目到上线的步骤

    初始化项目 1.在安装了node.js的前提下,使用以下命令 npm install --g vue-cli 2.在将要构建项目的目录下 vue init webpack myproject(项目目录 ...

  2. Vue脚手架搭建项目

    全局安装vue脚手架 $ npm install -g vue-cli 卸载方法 $ npm uninstall -g vue-cli 查看vue版本(注意:大写的V) $ vue -V 创建项目 $ ...

  3. 基于node的前端项目代码包发布至nexus

    目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...

  4. vue+webpack+element-ui项目打包优化速度与app.js、vendor.js打包后文件过大

    从开通博客到现在也没写什么东西,最近几天一直在研究vue+webpack+element-ui项目打包速度优化,想把这几天的成果记录下来,可能对前端牛人来说我这技术比较菜,但还是希望给有需要的朋友提供 ...

  5. 基于Vue的工作流项目模块中,使用动态组件的方式统一呈现不同表单数据的处理方式

    在基于Vue的工作流项目模块中,我们在查看表单明细的时候,需要包含公用表单信息,特定表单信息两部分内容.前者表单数据可以统一呈现,而后者则是不同业务的表单数据不同.为了实现更好的维护性,把它们分开作为 ...

  6. vue.js项目打包上线

    最近一直坚持每个月写一个小的vue.js 开发的项目,最后开发完成后想到很久之前给别人回答的一个问题:vue的项目如何上线,当时有千奇百怪的回答,我在想,这些人都是肿了么,vue的官方都说了,这个框架 ...

  7. 基于Vue的WebApp项目开发(二)

    利用webpack解析和打包.vue组件页面 相关知识: vue项目中的每个页面其实都是一个.vue的文件,这种文件,Vue称之为组件页面,必须借助于webpack的vue-loader才能运行,所以 ...

  8. 基于Vue的WebApp项目开发(一)

    了解webpack的魔力: 项目结构以及开发环境 webpack初体验之打包文件 1.首先创建三个文件,分别是index.html.main.js和calc.js index.html <!DO ...

  9. 从零开始搭建vue移动端项目到上线

    先来看一波效果图 初始化项目 1.在安装了node.js的前提下,使用以下命令 npm install --g vue-cli 2.在将要构建项目的目录下 vue init webpack mypro ...

随机推荐

  1. jquery 拓展函数集

    方式: 通过拓展在调用$()时返回的包装器 1.将函数绑定到$.fn $.fn.disable = function(){ return this.each(function(){ if (typeo ...

  2. easyui numberbox输入框 编辑不可编辑的切换

    背景:申请单里需要选费用类型,费用类型有的有子明细项,有个合计项    当有子明细项的时候,合计项的值是通过弹出的子明细项价格的总和(设置为可编辑没问题,因为点击出来弹框,编辑不了)    没有子明细 ...

  3. C语言——栈的基本运算在顺序栈上的实现

    头文件 Seqstack.h #define maxsize 6 //const int maxsize = 6; // 顺序栈 typedef struct seqstack { int data[ ...

  4. 【转】Silverlight无法添加服务引用

    引用地址:http://blog.sina.com.cn/s/blog_6e9c36f501017yzv.html 错误如下: 错误 7 自定义工具错误: 无法生成服务引用“ServiceRefere ...

  5. html5自我总结

    2017年7月30日 合抱之木,生于毫末.九层之台,起于累土.软件行业要熟记和训练的东西有很多,在此,写一下如何快速搭建html及自我见解(这里只介绍我自己用到的,还有部分存在但是用不到的就不讲解了) ...

  6. 关于ios 10 的新的部分

    编译器Xcode 8.2.1  SDK 10.2 1.   关于麦克风,相机,相册等部分的权限,需要在info.plist内进行设置,否则会出现crash.

  7. css outline属性

    outline属性在一个html element的周围画出一条线来,位于边框的外围,起到突出元素的作用.轮廓线不占据任何布局空间,也不一定非要是矩形. p { outline:#00FF00 dott ...

  8. CSS/LESS tips and snippets

    如何style line-through? <style type="text/css"> span.inner { color: green; } span.oute ...

  9. 排查在 Azure 中创建、重启 Linux VM 或调整其大小时发生的分配故障

    创建 VM.重启已停止(解除分配)的 VM 和重设 VM 大小时,Azure 会为订阅分配计算资源. 执行这些操作时,即使尚未达到 Azure 订阅限制,也可能偶尔收到错误. 本文说明一些常见分配故障 ...

  10. SQLSERVER 中GO的作用

    go 向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号.go是把t-sql语句分批次执行.(一步成功了才会执行下一步,即一步一个go) BEGIN 和 END 语句 ...