基于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之浮动窗口实现代码(两种方法)
Sep 08 Javascript
extjs 04_grid 单击事件新发现
Nov 27 Javascript
JavaScript中prototype为对象添加属性的误区介绍
Oct 15 Javascript
JavaScript新窗口与子窗口传值详解
Feb 11 Javascript
js实现的点击数量加一可操作数据库
May 09 Javascript
使用JavaScript实现旋转的彩圈特效
Jun 23 Javascript
jquery实现选中单选按钮下拉伸缩效果
Aug 06 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
Sep 01 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
Apr 08 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
Sep 04 Javascript
JavaScript canvas绘制折线图
Feb 18 Javascript
react实现复选框全选和反选组件效果
Aug 25 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无刷新上传文件实现代码
2011/09/19 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
从javascript语言本身谈项目实战
2006/12/27 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
Python实现把回车符\r\n转换成\n
2015/04/23 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
python中pop()函数的语法与实例
2020/12/01 Python
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
华润集团网上药店:健一网
2016/09/19 全球购物
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
铭宣海淘转运:美国、日本、英国转运等全球转运公司
2019/09/10 全球购物
门卫岗位职责
2013/11/15 职场文书
前台接待岗位职责
2013/12/03 职场文书
财务会计专业个人求职信范本
2014/01/08 职场文书
团队精神的演讲稿
2014/05/14 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
如何基于python实现单目三维重建详解
2022/06/25 Python
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis