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. 注册过程分解
-
环境判断阶段:
if (typeof window !== 'undefined') { window.Vue = Vue } else if (typeof global !== 'undefined') { global.Vue = Vue // Node环境 } -
污染检测保护:
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