理顺8个版本vue的区别(小结)


Posted in Javascript onSeptember 17, 2018

一共8个版本的vue

理顺8个版本vue的区别(小结)

术语

  • 完整版:同时包含编译器和运行时的版本。
  • 编译器:用来将模板字符串编译成为 JavaScript 渲染函数的代码。
  • 运行时:用来创建 Vue 实例、渲染并处理虚拟 DOM 等的代码。基本上就是除去编译器的其它一切。
  • UMD:UMD 版本可以通过 <script> 标签直接用在浏览器中。jsDelivr CDN 的 https://cdn.jsdelivr.net/npm/vue 默认文件就是运行时 + 编译器的 UMD 版本 (vue.js)。
  • CommonJS:CommonJS 版本用来配合老的打包工具比如 Browserify 或 webpack 1。这些打包工具的默认文件 (pkg.main) 是只包含运行时的 CommonJS 版本 (vue.runtime.common.js)。
  • ES Module:ES module 版本用来配合现代打包工具比如 webpack 2 或 Rollup。这些打包工具的默认文件 (pkg.module) 是只包含运行时的 ES Module 版本 (vue.runtime.esm.js)。

重点:

如果你需要在客户端编译模板 (比如传入一个字符串给 template 选项,或挂载到一个元素上并以其 DOM 内部的 HTML 作为模板),就将需要加上编译器

通俗来说,就是runtime版本是无法对template进行解析的

一共8个vue版本,都是用在什么情况下的?

  1. 默认会用的哪个vue版本,vue-cli里用的哪个版本?
  2. 如何指定使用哪个版本的vue?

不急,从2个维度去理解这8个版本。

  • 根据是否需要编译器分为: 运行时版本 和 完整版
  • 根据这个vue代码用在什么地方: 分为UMD / CommonJS / ES Module

【运行时版本】和【完整版】的区别: 用不用编译?

  • 完整版: 包括编译器和运行时的版本
  • 编译器: vue里用的<template></template>语法是需要被编译的
  • 运行时: 用来创建Vue实例、渲染、处理虚拟Dom,可以理解为除了编译器剩下的代码都属于运行时

如果你需要使用template的语法,就需要编译器,那么就要使用完整版

用了.vue文件的大多数情况下,你可以用运行时版本

当你使用vue-loader或vueify的时候, *.vue文件内部会预编译成JS,所以你在最终打好的包里,

实际上是不需要编译器的,所以这种情况,应该用运行时版本,毕竟运行时版本的体积比完整版要小30%

如果我一定要用完整版的呢? 如何选择版本呢?

你需要在webpack里配置alias

module.exports = {
 // ...
 resolve: {
  alias: {
   'vue$': 'vue/dist/vue.esm.js' // 用 webpack 1 时需用 'vue/dist/vue.common.js'
  }
 }
}

UMD / CommonJS / ES Module 的区别: 你的vue用在什么地方?

  • 当你通过script标签来引用vue源码时,用UMD版本
  • 当你通过低版本的打包工具,比如webpack1,用CommonJS版本
  • 当你通过现代打包工具比如 webpack 2 或 Rollup,用ES Module版本

其他

  • vue源码会根据process.env.NODE_ENV来判断是用生产还是开发环境的代码
  • webpack里可以有自带的 new webpack.DefinePlugin()来设置process.env.NODE_ENV

类似这样

new webpack.DefinePlugin({
   'process.env': env
  }),

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js css样式操作代码(批量操作)
Oct 09 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 03 Javascript
前端开发的开始---基于面向对象的Ajax类
Sep 17 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
Mar 18 Javascript
JS中获取数据库中的值的方法
Jul 14 Javascript
利用cookie记住背景颜色示例代码
Nov 04 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
Nov 26 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
Dec 29 Javascript
JavaScript表单验证实例之验证表单项是否为空
Jan 10 Javascript
JS采用绝对定位实现回到顶部效果完整实例
Jun 20 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
Nov 12 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
Nov 26 Javascript
vue.js编译时给生成的文件增加版本号
Sep 17 #Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
Sep 17 #Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
Sep 17 #Javascript
微信小程序中this.data与this.setData的区别详解
Sep 17 #Javascript
Puppet的一些技巧
Sep 17 #Javascript
详解JavaScript添加给定的标签选项
Sep 17 #Javascript
Element-ui tree组件自定义节点使用方法代码详解
Sep 17 #Javascript
You might like
基于mysql的bbs设计(二)
2006/10/09 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
文本加密解密
2006/06/23 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
python去除所有html标签的方法
2015/05/05 Python
Python入门之modf()方法的使用
2015/05/15 Python
Python实现大文件排序的方法
2015/07/10 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
浅析Python四种数据类型
2018/09/26 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
电脑租赁公司创业计划书
2014/01/08 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
2015年少先队活动总结
2015/03/25 职场文书
无保留意见审计报告
2015/06/05 职场文书
导游词之上饶龟峰
2019/10/25 职场文书