前言

调用 initUse(Vue) 源码位置 src/core/global-api/use.js


export function initUse (Vue: GlobalAPI) { 
  Vue.use = function (plugin: Function | Object) {
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
    // 判断是否已经安装,没有则安装,有则返回this(只能安装一次)
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    } 

    // additional parameters 
    const args = toArray(arguments, 1) //toArray将类数组变成真正的数组 ,第二个参数是从索引1开始( 0是插件本身 例:Vue.use(插件,参数) )
    args.unshift(this) //这里的this是Vue,这样的话每个插件都会有Vue实例
    if (typeof plugin.install === 'function') {
      plugin.install.apply(plugin, args)
    } else if (typeof plugin === 'function') {
      plugin.apply(null, args)
    }
    installedPlugins.push(plugin) //添加到以注册组件数组中
    return this
  }
}

总结

Vue.use()是通过initUse进行初始化的
Vue.use接收一个参数,检测当前实例上是否已经安装了次插件
通过toArray方法处理类数组并返回真正的数组
向该数组最前面添加一个当前实例
判断当前插件是否存在install方法,存在就调用,不存在调用函数本身
将注册后的插件添加到installedPlugins数组,避免重复添加