vue3的Global API 改为应用程序实例调用以及可做摇树优化
Global APIvue2中有很多全局api可以改变vue的行为,比如Vue.component等。这导致一些问题:vue2没有app概念,new Vue()得到的根实例被作为app,这样的话所有创建的根实例是共享相同的全局配置,这在测试时会污染其他测试用例,导致测试变得困难。全局配置也导致没有办法在单页面创建不同全局配置的多个app实例。vue3中使用createApp返回app实例,由它暴露
·
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)
更多推荐
已为社区贡献1条内容
所有评论(0)