Vue的全局Api改为应用实例的全局Api。Vue2的全局Api可以全局改变Vue的行为。这种操作很容易不小心污染其他测试用例。}from'@vue/test-utils'//扩展vue的构造函数constlocalVue=createLocalVue()//在`local`Vue构造函数上全局安装插件localVue.use(Myplugin)//通过localVuemount(Component,{localVue})全局配置会使得在同一页面的多个应用之间共享Vue副本变得非常困难//这里的mixin会影响两个根实例Vue.mixin({/*...*/})constapp1=newVue({el:'#app1'})constapp2=newVue({el:'#app2'})Vue3中新的全局Api:createAppcreateApp返回一个应用实例,import{createApp}from'vue'constapp=createApp({})//如果你使用的是Vue的CDN,那么createApp是通过全局Vue对象const暴露的{createApp}=Vueconstapp=createApp({})Vue3对比Vue2全局Api变化2.x全局Api3.x实例(app)ApiVue.cofingapp.configVue.config.productionTip*移除Vue.config.ignoredElements*app.config.isCustomElementVue.componentapp.componentVue.directiveapp.directiveVue.mixinapp。mixinVue.use*app.useVue.prototype*app.config.globalProperties所有其他不改变全局行为的全局API现在被命名为exportsconfig.productionTip在Vue3.x中删除,”“Useproductionbuild”提示仅在使用“dev+fullbuild”(包含运行时编译器并有警告的构建)进行ES模块构建时出现,因为它们与bundlers一起使用,在大多数情况下,CLI或boilerplate已经正确配置了生产环境,所以不会再出现这个trick。config.ignoredElements被config.isCustomElement替换引入这个配置项的目的是为了支持原生的自定义元素,所以重命名可以更好的传达它的功能,新的选项也需要比使用String/RegExp更灵活的功能//2.xVue.config.ignoredElements=['my-el',/^ion-/]//3.xconstapp=createApp({})app.config.isCustomElement=tag=>tag.startsWith('ion-')在Vue中3,检查一个元素是否是一个组件已经被移动到模板编译阶段,所以只有在使用运行时编译器配置选项时才考虑这一点。如果您使用的是仅运行时版本,则必须在构建步骤中通过@vue/compiler-dom替换isCustomElement-例如,通过vue-loader中的compilerOptions选项。如果config.isCustomElement在使用仅运行时构建时,将发出警告,指示用户在构建设置中传递此选项;这将是VueCLI配置中的一个新的顶级选项。Vue.prototype被config.globalProperties取代在Vue2中,Vue.prototype通常用于添加所有组件都可以访问的属性在Vue3中,它相当于config.globalProperties这些属性将作为实例化组件的一部分复制到应用程序中//2.xVue.prototype.$http=()=>{}//3.xconstapp=createApp({})app.config.globalProperties.$http=()=>{}//使用provide时,它也应该考虑使用插件来替代globaProperties插件开发者通常使用vue.use,比如官方的vue-router如何在浏览器环境中自行安装varinBrowser=typeofwindow!=='undefined'/*...*/if(inBrowser&&window.Vue){window.Vue.use(VueRouter)}现在useglobalApi已经不用了,需要手动指定使用这个插件constapp=createApp(MyApp)app.use(VueRouter)挂载App实例用createApp初始化后,应用实例app就可以挂载到组件ins上了tance使用app.mount(domTarget)。经过以上改动,完整的写法将改写为如下代码,{data:()=>({count:0}),template:``})app.directive('focus',{mounted:el=>el.focus()})app.mount('#app')提供/inject和2.x类似于示例中使用provide选项,Vue3应用实例也可以提供应用中任意组件可以注入的依赖//入口文件app.provide('guide','Vue3Guide')//subComponentexportdefault{inject:{book:{from:'guide'}},template:`
