Global API

vue2中有很多全局api可以改变vue的行为,比如Vue.component等。这导致一些问题:

vue2没有app概念,new Vue()得到的根实例被作为app,这样的话所有创建的根实例是共享相同的全局配置,这在测试时会污染其他测试用例,导致测试变得困难。

全局配置也导致没有办法在单页面创建不同全局配置的多个app实例。

vue3中使用createApp返回app实例,由它暴露一系列全局api。

//默认初始化的情况是这样的
import { createApp } from 'vue'
const app = createApp().mount('#app')

因为createApp返回的是一个实例所以我们可以在app后面进行链式调用。

import { createApp ,createRenderer, h} from 'vue'
import App from './App.vue'
import './index.css'
import Canvas from './components/canvas.vue'
createApp(App)
.component('comp',{
    render(){
        return  h('div','I am comp')
    }
})
.mount('#app')

在首页引用该组建后。在这里插入图片描述

API可做摇树优化

vue2中不少global-api是作为静态函数直接挂在构造函数上的,例如Vue.nextTick(),如果我们从未在代码中用过它们,就会形成所谓的dead code,这类global-api造成的dead code无法使用webpack的tree-shaking排除掉。
例如,vue2中会这样写:

import Vue from 'vue'

Vue.nextTick(() => {
 // something something DOM-related
})

但是vue3中做了相应的变化,将它们抽取成为独立函数,这样打包工具的摇树优化可以将这些dead code排除掉。

import { nextTick } from 'vue'


nextTick(() => {
 // something something DOM-related
})

受影响api:

  • Vue.nextTick
  • Vue.observable (replaced by Vue.reactive)
  • Vue.version
  • Vue.compile (only in full builds)
  • Vue.set (only in compat builds)
  • Vue.delete (only in compat builds)
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐