基于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 相关文章推荐
JavaScript 指导方针
Apr 05 Javascript
jQuery的position()方法详解
Jul 19 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
Sep 06 Javascript
jQuery实现简单的网页换肤效果示例
Sep 18 Javascript
分类解析jQuery选择器
Nov 23 Javascript
JSON 数据详解及实例代码分析
Jan 20 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
Jan 22 Javascript
Google 爬虫如何抓取 JavaScript 的内容
Apr 07 Javascript
react中使用swiper的具体方法
May 15 Javascript
js实现导航跟随效果
Nov 17 Javascript
vue 解决computed修改data数据的问题
Nov 06 Javascript
js实现弹幕墙效果
Dec 10 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网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
高一生物教学反思
2014/01/17 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
英语分层教学实施方案
2014/06/15 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书