解析vue的脚手架中的main.js文件

基本代码格式含义

//导包
import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

Vue.config.productionTip = false

作用:用来关闭 Vue.js 在启动时的生产提示信息
关闭原因:上线后部署到生产环境中时,这些提示信息会敏感信息,影响代码的执行效率
生产提示:例如控制台输出的调试信息

render: h => h(App),
这个是一个简写形式,将它写全

render: (createElement) => {
 return createElement("h1", { a: 1 }, "h111111");
}

render配置项是一个函数
当代码运行的时候,render函数就会执行,render函数接受一个createElement方法作为参数
createElement方法是使用原生js的方式,根据参数创建虚拟DOM
createElement接受两种参数
1. 标签名,属性,子节点 组成的参数
2. 一个组件配置对象
vue中通常把createElement方法称作为h方法

深层次原因

问题1:为什么要使用render而不使用模板telmate
解答:Vue将所依赖的包分成了两个部分,一个部分是核心包,一个是模板编译包,核心包是没有模板编译功能的,就如上述的导包import Vue from 'vue'它其实导入的是一个核心包是不具有编译模板的功能的,因此如果使用template是无法解析模板的,执行的时候会出现报错

new Vue({
  // render: h => h(App),
  //改成模板结构
  template:"<App></App>",
  components:{
    App
  }
}).$mount('#app')

报错信息: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.

根据上面的报错信息,可以得知仅仅使用了runtime-only build of Vue这种包,它是不具有编译功能的,因此Either....or提供了两种解决方式

1.将要渲染的模板交给render函数

在main.js中它相当于没有使用模板 ,render配置项是一个函数,当代码运行的时候,render函数就会执行,render函数接受一个createElement方法作为参数,createElement方法是原生js的方式,根据参数创建虚拟DOM,

在子组件中: Vue项目在打包过程中,针对每个单文件组件,Vue 会将 <template> 标签中的模板代码编译成渲染函数。这样,在组件实例化时,就可以直接使用已经预编译的渲染函数来渲染组件,而不用先进行模板编译的过程。 这一过程发生在 webpack 打包时通过 使用vue-template-compiler自动对每个单文件组件的<template>模板编译得到渲染函数。这样做的好处
可以提高组件的性能,避免每次渲染都要重新解析模板生成渲染函数的开销。
并且在打包好的项目中使用的vue不需要使用完整版本的vue,只需要使用runtime版本的vue即可,可以节省30%左右的大小因此,Vue 单文件组件中的 <template> 标签可以说是最终转化成了 js 代码,并且被编译成预编译的渲染函数保存起来,以提高组件的运行效率。

在项目上线的时候吗,是不需要进行模板编译的,因为Vue.js在2.0版本之后引入了基于渲染函数的虚拟DOM机制,这种方式可以在不需要模板的情况下生成虚拟DOM,因此打包后的项目在服务端运行的时候,进行diff比较的时候,新旧虚拟dom都已经不需要进行模板解析了

2.使用 compiler-included build使用包含编译模块的vue包

打开node_moude–>vue–>types–>package.son可以找到所导入的包 "module": "dist/vue.runtime.esm.js",它是不全的,缺少编译模板的部分
在node_moude–>vue–>dist的文件下可以看到所有的vue包

所有的包.PNG

为什么将vue的包要拆分成这个样子

一个不太恰当的比喻去解释,要贴瓷砖,两种策略
买工人+买瓷砖—>完成后—>贴好的地板+工人
雇佣工人+买瓷砖—>完成后—>贴好的地板
因为项目上线之后,就不需要编译模板部分的文件了,这个文件占整个vue包的三分之一,所以就将vue包拆分为两个部分,就如同上述的例子,工人贴完瓷砖就没必要再保留下来,会增加不必要的消耗。

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYfsjIUU' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片