基于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 相关文章推荐
Firefox和IE浏览器兼容JS脚本写法小结
Jul 07 Javascript
xml分页+ajax请求数据源+dom取结果实例代码
Oct 31 Javascript
20款效果非常棒的 jQuery 插件小结分享
Nov 18 Javascript
jQuery $命名冲突解决方案汇总
Nov 13 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
Javascript之Number对象介绍
Jun 07 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
Jul 27 Javascript
JavaScript蒙板(model)功能的简单实现代码
Aug 04 Javascript
深入理解React中es6创建组件this的方法
Aug 29 Javascript
js实现手机发送验证码功能
Mar 13 Javascript
vue如何引用其他组件(css和js)
Apr 13 Javascript
详解Element 指令clickoutside源码分析
Feb 15 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 intval的测试代码发现问题
2008/07/27 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
Javascript 日期处理之时区问题
2009/10/08 Javascript
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
js获取json中key所对应的value值的简单方法
2020/06/17 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
详解vue-cli3使用
2018/08/14 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
js实现的在本地预览图片功能示例
2019/11/09 Javascript
python实现的一个火车票转让信息采集器
2014/07/09 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
校园报刊亭的创业计划书
2014/01/02 职场文书
回门宴答谢词
2014/01/13 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
公司开会通知
2015/04/20 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
vue使用element-ui按需引入
2022/05/20 Vue.js