基于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 相关文章推荐
ie 处理 gif动画 的onload 事件的一个 bug
Apr 12 Javascript
JavaScript的单例模式 (singleton in Javascript)
Jun 11 Javascript
JQuery AJAX提交中文乱码的解决方案
Jul 02 Javascript
自动最大化窗口的Javascript代码
May 22 Javascript
SeaJS 与 RequireJS 的差异对比
Dec 08 Javascript
jQuery中wrapAll()方法用法实例
Jan 16 Javascript
JS实现回到页面顶部动画效果的简单实例
May 24 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
Feb 09 Javascript
详解ajax的data参数错误导致页面崩溃
Apr 30 Javascript
jQuery插件实现的日历功能示例【附源码下载】
Sep 07 jQuery
VUE安装使用教程详解
Jun 03 Javascript
解决vue watch数据的方法被调用了两次的问题
Nov 07 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
URL中“#” “?” &amp;“”号的作用浅析
2017/02/04 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
js中url对象化管理分析
2017/12/29 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
详解node.js 事件循环
2020/07/22 Javascript
Python常用正则表达式符号浅析
2014/08/13 Python
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
python实现从字典中删除元素的方法
2015/05/04 Python
Python Paramiko模块的安装与使用详解
2016/11/18 Python
python-str,list,set间的转换实例
2018/06/27 Python
python 求定积分和不定积分示例
2019/11/20 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
见习期自我鉴定
2013/11/07 职场文书
爱心倡议书范文
2014/05/12 职场文书
学校标语大全
2014/06/19 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python