基于Vue生产环境部署详解


Posted in Javascript onSeptember 15, 2017

前面的话

开发时,Vue 会提供很多警告来帮助解决常见的错误与陷阱。生产时,这些警告语句却没有用,反而会增加载荷量。再次,有些警告检查有小的运行时开销,生产环境模式下是可以避免的。本文将详细介绍Vue生产环境部署

生产环境

如果用 Vue 完整独立版本 (直接用 <script> 元素引入 Vue),生产时应该用精简版本 (vue.min.js)

如果用 Webpack 或 Browserify 类似的打包工具时,生产状态会在 Vue 源码中由 process.env.NODE_ENV 决定,默认在开发状态。Webpack 与 Browserify 两个打包工具都提供方法来覆盖此变量并使用生产状态,警告语句也会被精简掉。每一个 vue-cli 模板有预先配置好的打包工具,但了解怎样配置会更好

【webpack】

使用 Webpack 的 DefinePlugin 来指定生产环境,以便在压缩时可以让 UglifyJS 自动删除代码块内的警告语句

var webpack = require('webpack')
module.exports = {
 // ...
 plugins: [
  // ...
  new webpack.DefinePlugin({
   'process.env': {
    NODE_ENV: '"production"'
   }
  }),
  new webpack.optimize.UglifyJsPlugin({
   compress: {
    warnings: false
   }
  })
 ]
}

【Browserify】

运行打包命令,设置 NODE_ENV 为 "production"。等于告诉 vueify 避免引入热重载和开发相关代码

使用一个全局 envify 转换 bundle 文件。这可以精简掉包含在 Vue 源码中所有环境变量条件相关代码块内的警告语句

NODE_ENV=production browserify -g envify -e main.js | uglifyjs -c -m > build.js

【Rollup】

使用 rollup-plugin-replace:

const replace = require('rollup-plugin-replace')
rollup({
 // ...
 plugins: [
  replace({
   'process.env.NODE_ENV': JSON.stringify( 'production' )
  })
 ]
}).then(...)

预编译模板

当需要处理 DOM 内或 JavaScript 内的模板时,“从模板到渲染函数”的编译就会在线上发生。通常情况下这种处理是足够快的,但是如果应用对性能很敏感最好还是回避。

预编译模板最简单的方式就是使用单文件组件 - 相关的构建设置会自动把预编译处理好,所以构建好的代码已经包含了编译出来的渲染函数而不是原始的模板字符串。

如果使用 Webpack,并且喜欢分离 JavaScript 和模板文件,可以使用 vue-template-loader,它也可以在构建过程中把模板文件转换成为 JavaScript 渲染函数

提取组件的CSS

当使用单文件组件时,组件内的 CSS 会以 <style> 标签的方式通过 JavaScript 动态注入。这有一些小小的运行时开销,如果使用服务端渲染,这会导致一段“无样式的内容瞬间 (fouc)”。横跨所有组件提取 CSS 到同一个文件回避这件事情,这也会更好的压缩和缓存 CSS

跟踪运行时错误

如果在组件渲染时出现运行错误,错误将会被传递至全局 Vue.config.errorHandler 配置函数 (如果已设置)。利用这个钩子函数和错误跟踪服务 (如 Sentry),可能是个不错的主意

以上这篇基于Vue生产环境部署就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
音乐播放用的的几个函数
Sep 07 Javascript
如何做到打开一个页面,过几分钟自动转到另一页面
Apr 20 Javascript
起点页面传值js,有空研究学习下
Jan 25 Javascript
Array 重排序方法和操作方法的简单实例
Jan 24 Javascript
浅谈Unicode与JavaScript的发展史
Jan 19 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
基于JavaScript短信验证码如何实现
Jan 24 Javascript
JavaScript学习笔记整理_setTimeout的应用
Sep 19 Javascript
微信小程序-详解数据缓存
Nov 24 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
Dec 09 Javascript
使用jQuery动态设置单选框的选中效果
Dec 06 jQuery
详解vue中axios请求的封装
Apr 08 Javascript
基于Vue单文件组件详解
Sep 15 #Javascript
json2.js 入门教程之使用方法与实例分析
Sep 14 #Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
Sep 14 #Javascript
iframe与主框架跨域相互访问实现方法
Sep 14 #Javascript
VsCode插件整理(小结)
Sep 14 #Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
Sep 14 #Javascript
vue 计时器组件的实现代码
Sep 14 #Javascript
You might like
php简单静态页生成过程
2008/03/27 PHP
PHP生成器简单实例
2015/05/13 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现类的静态变量用法实例
2015/05/08 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
基于python socketserver框架全面解析
2017/09/21 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
Java servlet面试题
2012/03/04 面试题
法制报告会主持词
2014/04/02 职场文书
上海世博会口号
2014/06/19 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
物业公司管理制度
2015/08/05 职场文书