基于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 相关文章推荐
利用js跨页面保存变量做菜单的方法
Jan 17 Javascript
js异步加载的三种解决方案
Mar 04 Javascript
js对象基础实例分析
Jan 13 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
Nov 18 Javascript
js实现tab选项卡切换功能
Jan 13 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
Jan 23 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
Feb 08 Javascript
原生js轮播(仿慕课网)
Feb 15 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
Oct 16 Javascript
Node.js 使用request模块下载文件的实例
Sep 05 Javascript
浅谈bootstrap layer.open中end的使用方法
Sep 12 Javascript
JavaScript代码异常监控实现过程详解
Feb 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
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
javascript实现左右控制无缝滚动
2014/12/31 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
Python判断直线和矩形是否相交的方法
2015/07/14 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
Python 创建TCP服务器的方法
2020/07/28 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
新春联欢会主持词
2014/03/24 职场文书
学生安全责任书
2014/04/15 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
初中学习计划书范文
2014/09/15 职场文书
公司周年庆典标语
2014/10/07 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS