Vue插件安装原理

424 阅读1分钟

前言

Vue是一个渐进式的JavaScript框架,它的核心问题是解决视图渲染的问题,其他的功能我们可以通过安装插件的形式来解决,在分析Vue-RouterVuex源码之前我们先了解一下Vue中插件的安装流程。

Vue.use

export function initUse (Vue: GlobalAPI) {
  Vue.use = function (plugin: Function | Object) {
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }
    
    const args = toArray(arguments, 1)
    args.unshift(this)
    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是一个全局的API,它接受一个函数或者对象作为参数,在内部维护了一个installedPlugins变量用于存储安装过的插件,保证插件的过程只能被调用一次。 主要流程:

  • 首先判断传入的插件是否已经安装过,如果安装过就直接返回
  • 构造参数args, 将Vue添加到args的第一个位置
  • 判断插件上install属性是否是一个函数,如果是一个函数就调用插件上的install方法
  • 否则就判断传入的插件是否是一个函数,如果是一个函数就调用插件本身将构造的参数传递进去
  • 最后将插件push到内部维护的installedPlugins变量中 这里有一个优化的点就是将Vue作为一个参数传递给插件,而不是在插件中通过import Vue from 'vue'的形式引入,可以减少包的体积。