Vue全局变量注册机制

148 阅读1分钟

1. 自动注册实现机制

源码定位(以dist/vue.js为例):

// 构建后的UMD文件头部
(function (global, factory) {
  //...
  global.Vue = factory()
})(this, function() {
  // Vue构造函数定义
  function Vue(options) {
    //...
  }
  
  // 原型方法
  Vue.prototype.$mount = function() {/*...*/}
  
  // 静态方法
  Vue.nextTick = function() {/*...*/}
  
  return Vue
})

2. 注册过程分解

  1. 环境判断阶段

    if (typeof window !== 'undefined') {
      window.Vue = Vue
    } else if (typeof global !== 'undefined') {
      global.Vue = Vue // Node环境
    }
    
  2. 污染检测保护

    if (typeof window.Vue !== 'undefined') {
      console.warn(
        'You are running Vue in development mode with existing global Vue.'
      )
    }
    

3. 自定义全局名称

高级用法(需修改构建配置):

// Rollup配置修改
export default {
  output: {
    name: 'MyVue', // 修改全局变量名称
    //...
  }
}

Q1:如何防止全局变量污染?

// 使用后立即释放全局变量
const Vue = window.Vue
delete window.Vue