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