如果你想开发一个同时支持Vue2和Vue3的库可能想到以下两种方式:

1.创建两个分支,分别支持Vue2和Vue3

2.只使用Vue2和Vue3都支持的API

这两种方式都有缺点,第一种很麻烦,第二种无法使用Vue3新增的组合式 API,其实现在Vue2.7+版本已经内置支持组合式API,Vue2.6及之前的版本也可以使用@vue/composition-api插件来支持,所以完全可以只写一套代码同时支持Vue2和3。虽然如此,但是实际开发中,同一个API在不同的版本中可能导入的来源不一样,比如ref方法,在Vue2.7+中直接从vue中导入,但是在Vue2.6-中只能从@vue/composition-api中导入,那么必然会涉及到版本判断,Vue Demi就是用来解决这个问题,使用很简单,只要从Vue Demi中导出你需要的内容即可:

import { ref, reactive, defineComponent } from 'vue-demi' Vue-demi会根据你的项目判断到底使用哪个版本的Vue,具体来说,它的策略如下:

<=2.6: 从Vue和@vue/composition-api中导出 2.7: 从Vue中导出(组合式API内置于Vue 2.7中)

=3.0: 从Vue中导出,并且还polyfill了两个Vue 2版本的set和del API 接下来从源码角度来看一下它具体是如何实现的。