0、目录

  • 1、开启生产环境模式
    • 1.1 不使用构建工具
    • 1.2 使用构建工具
  • 2、模板预编译
  • 3、提取组件的 CSS
  • 4、跟踪运行时错误
  • 5、参考链接

1、开启生产环境模式

开发环境下,Vue 会提供很多警告来帮你对付常见的错误与陷阱。而在生产环境下,这些警告语句却没有用,反而会增加应用的体积。此外,有些警告检查还有一些小的运行时开销,这在生产环境模式下是可以避免的。

1.1 不使用构建工具

如果用 Vue 完整独立版本,即直接用

1.2 使用构建工具

当使用 webpack 或 Browserify 类似的构建工具时,Vue 源码会根据 process.env.NODE_ENV 决定是否启用生产环境模式,默认情况为开发环境模式。在 webpack 与 Browserify 中都有方法来覆盖此变量,以启用 Vue 的生产环境模式,同时在构建过程中警告语句也会被压缩工具去除。所有这些在 vue-cli 模板中都预先配置好了,但了解一下怎样配置会更好。

webpack

在 webpack 4+ 中,你可以使用 mode 选项:

module.exports = {mode: 'production'
}

但是在 webpack 3 及其更低版本中,你需要使用 DefinePlugin:

var webpack = require('webpack')module.exports = {// ...plugins: [// ...new webpack.DefinePlugin({'process.env.NODE_ENV': JSON.stringify('production')})]
}

Browserify

  • 在运行打包命令时将 NODE_ENV 设置为 “production”。这等于告诉 vueify 避免引入热重载和开发相关的代码。
  • 对打包后的文件进行一次全局的 envify 转换。这使得压缩工具能清除掉 Vue 源码中所有用环境变量条件包裹起来的警告语句。例如:
NODE_ENV=production browserify -g envify -e main.js | uglifyjs -c -m > build.js

或者在 Gulp 中使用 envify

// 使用 envify 的自定义模块来定制环境变量
var envify = require('envify/custom')browserify(browserifyOptions).transform(vueify).transform(// 必填项,以处理 node_modules 里的文件{ global: true },envify({ NODE_ENV: 'production' })).bundle()

或者配合 Grunt 和 grunt-browserify 使用 envify

// 使用 envify 自定义模块指定环境变量
var envify = require('envify/custom')browserify: {dist: {options: {// 该函数用来调整 grunt-browserify 的默认指令configure: b => b.transform('vueify').transform(// 用来处理 `node_modules` 文件{ global: true },envify({ NODE_ENV: 'production' })).bundle()}}
}

Rollup
使用 @rollup/plugin-replace:

const replace = require('@rollup/plugin-replace')
rollup({// ...plugins: [replace({'process.env.NODE_ENV': JSON.stringify( 'production' )})]
}).then(...)

2、模板预编译

当使用 DOM 内模板或 JavaScript 内的字符串模板时,模板会在运行时被编译为渲染函数。通常情况下这个过程已经足够快了,但对性能敏感的应用还是最好避免这种用法。

预编译模板最简单的方式就是使用单文件组件——相关的构建设置会自动把预编译处理好,所以构建好的代码已经包含了编译出来的渲染函数而不是原始的模板字符串。

如果你使用 webpack,并且喜欢分离 JavaScript 和模板文件,你可以使用 vue-template-loader,它也可以在构建过程中把模板文件转换成为 JavaScript 渲染函数。

3、提取组件的 CSS

当使用单文件组件时,组件内的 CSS 会以 style> 标签的方式通过 JavaScript 动态注入。这有一些小小的运行时开销,如果你使用服务端渲染,这会导致一段“无样式内容闪烁 (fouc)”。将所有组件的 CSS 提取到同一个文件可以避免这个问题,也会让 CSS 更好地进行压缩和缓存。

查阅这个构建工具各自的文档来了解更多:

  • webpack + vue-loader (vue-cli 的 webpack 模板已经预先配置好)
  • Browserify + vueify
  • Rollup + rollup-plugin-vue

4、跟踪运行时错误

如果在组件渲染时出现运行错误,错误将会被传递至全局 Vue.config.errorHandler 配置函数 (如果已设置)。利用这个钩子函数来配合错误跟踪服务是个不错的主意。比如 Sentry,它为 Vue 提供了官方集成。

5、参考链接

[01] 生产环境部署 - Vue.js官方文档

320、Vue学习笔记26 -【生产环境部署】 2020.04.20相关推荐

  1. Django生产环境部署—Ubuntu20.04 server安装(一)

    基于Django生产环境的搭建,本系统是基于Python3.8,Django3.2版本进行开发和部署.因此Ubuntu系统直接采用20.04版本,此系统Python默认版本为3.8.直接在此版本的基础 ...

  2. Vue.js 生产环境部署

    生产环境部署 开启生产环境模式 开发环境下,Vue 会提供很多警告来帮你对付常见的错误与陷阱.而在生产环境下,这些警告语句却没有用,反而会增加应用的体积.此外,有些警告检查还有一些小的运行时开销,这在 ...

  3. 深度学习TensorFlow生产环境部署(环境准备篇)

    最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...

  4. 狂神说 vue学习笔记

    vue学习笔记 文章目录 vue学习笔记 一.第一个vue程序 1. 什么是MVVM 2. 为什么要使用MVVM 3.直接新建项目 4.导入vue.js 5.简单绑定元素 6 vue的声明周期 二.V ...

  5. vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈)

    vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈)   这篇文章是博主在看vue-前端发展简史的时候做的笔记,以供后续学习复习 文章目录 vue学习笔记-01-前端的发展历 ...

  6. Vue学习笔记(三)Vue2三种slot插槽的概念与运用 | ES6 对象的解构赋值 | 基于Vue2使用axios发送请求实现GitHub案例 | 浏览器跨域问题与解决

    文章目录 一.参考资料 二.运行环境 三.Vue2插槽 3.1 默认插槽 3.2 具名插槽 3.3 作用域插槽 ES6解构赋值概念 & 作用域插槽的解构赋值 3.4 动态插槽名 四.GitHu ...

  7. 「Vue 学习笔记 1」Vue 项目快速搭建,初始项目各个文件夹作用介绍和启动代码执行流程分析

    「Vue 学习笔记 1」Vue 项目快速搭建,初始项目各个文件夹作用介绍和启动代码执行流程分析 前言 一.我的开发环境 二.使用 Vue CLI (Vue 脚手架)快速搭建项目 三.初始项目的目录结构 ...

  8. flink1.12.0学习笔记第1篇-部署与入门

    flink1.12.0学习笔记第 1 篇-部署与入门 flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇-高级 ...

  9. 如何让nginx执行python代码_生产环境部署Python语言代码(django+uwsgi+nginx)

    本文主要向大家介绍了生产环境部署Python语言代码(django+uwsgi+nginx),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 基础环境不做介绍,在django开发w ...

最新文章

  1. peer not authenticated的终极解决方案
  2. Spring原始注解开发-02
  3. matlab中nsamp,matlab用于数字调制,几个函数的使用问题
  4. 坚持探索与落地并重,阿里巴巴云原生之路全景揭秘
  5. ajax参数中有加号,浅谈在js传递参数中含加号(+)的处理方式
  6. PowerShell定时记录操作系统行为
  7. C++调用.lib的方法
  8. 分布式系统研发初体验
  9. Python入门--with语句
  10. 为什么我比别人差这么多?
  11. UVA - 11520 Fill the Square
  12. 虚拟化技术中,不同层级结构间的虚拟化运用
  13. 阿里云矢量图html页面引入,使用阿里矢量图标库的三种方法
  14. github注册以及安装教程
  15. Android内存泄漏检测工具大全
  16. ios 导航条消失 navigationBar.hidden 和 navigationBarHidden 区别
  17. 引导魔女之力,征服星辰大海 升级篇: 重要事情说三遍: 升级!升级!!升满级!!! 简述: 1.本篇仅升级,涉及到的技巧全职业都可以参考; 2.考虑到萌新刚玩通关护卫者系统等级不高,故
  18. 华南师范大学计算机学院男生宿舍,最全!广东68所本科高校宿舍汇总!你的宿舍豪华还是简陋?...
  19. [指北针分类信息软件 v1.5.2.1] 全自动分类信息软件+高效稳定建立SEO外部链接
  20. 起底被阿里相中的汇通达:另类农村电商独角兽如何炼成

热门文章

  1. 当当图书,这又是何苦。
  2. 计算机类软件工程与测绘类遥感专业的薪水,2018遥感科学与技术专业就业前景和就业方向分析...
  3. android企业自定义桌面
  4. PAT-2018 L1-049. 天梯赛座位分配
  5. 怎样抠图怎么把背景换成白色?几个步骤教你轻松掌握
  6. vivox9怎么和计算机共享,vivo手机怎么和笔记本电脑共享文件和网络
  7. 飞思卡尔imx6q交叉编译工具有关问题
  8. 哈尔滨学计算机编程学校,哈尔滨中小学生编程学校排名
  9. java unrar.jar下载_unrar.jar解压缩rar文件
  10. 编译winmerge源代码