基于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 相关文章推荐
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
Feb 03 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
Aug 30 Javascript
jquery获取一个元素下面相同子元素的个数代码
Jul 31 Javascript
轻松实现Bootstrap图片轮播
Apr 20 Javascript
jquery获取复选框checkbox的值的简单实现方法
May 26 Javascript
Angularjs 自定义服务的三种方式(推荐)
Aug 02 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
详解Vue文档中几个易忽视部分的剖析
Mar 24 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
Jun 29 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
Aug 29 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
May 30 Javascript
vue+django实现一对一聊天功能的实例代码
Jul 17 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
Apache2 httpd.conf 中文版
2006/12/06 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
php猜单词游戏
2015/09/29 PHP
php实现简单四则运算器
2020/11/29 PHP
围观tangram js库
2010/12/28 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Python实现保证只能运行一个脚本实例
2015/06/24 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
利用python实现周期财务统计可视化
2019/08/25 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
清明节演讲稿
2014/05/27 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
公司搬迁通知
2015/04/20 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
Python中常见的导入方式总结
2021/05/06 Python
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
详细介绍python类及类的用法
2021/05/31 Python
Node与Python 双向通信的实现代码
2021/07/16 Javascript