基于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 相关文章推荐
jQuery的写法不同导致的兼容性问题的解决方法
Jul 29 Javascript
JS深度拷贝Object Array实例分析
Mar 31 Javascript
angularjs 源码解析之scope
Aug 22 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
Nov 07 Javascript
Angular.js中处理页面闪烁的方法详解
Mar 09 Javascript
jquery版轮播图效果和extend扩展
Jul 18 jQuery
详解React 16 中的异常处理
Jul 28 Javascript
Bootstrap与Angularjs的模态框实例代码
Aug 03 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
Aug 11 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
Jan 07 Javascript
什么时候不能在 Node.js 中使用 Lock Files
Jun 24 Javascript
JS动态图片的实现方法完整示例
Jan 13 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
php获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
AngularJS表单验证功能分析
2017/05/26 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
python如何从键盘获取输入实例
2020/06/18 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
C++是不是类型安全的
2014/02/18 面试题
大专毕业生简历的自我评价
2013/10/20 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
谢师宴学生致辞
2015/07/27 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
Python包argparse模块常用方法
2021/06/04 Python
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL