总是纠结在写不写随笔之间,自我感觉很菜,但是对源码爱得深沉,就写给自己看吧,希望查漏补缺,我会坚持写下去,欢迎大家指正。

我在网上看了很多人写的源码,按照依赖的方式一个一个找包,再找函数,我觉得太麻烦,复杂。所以直接看vue.js。

打开vue.js,是个自执行函数,也就是IIFE。

(function(global,factory){
    typeof exports === 'object' && typeof module !== 'undefined' 
        ? module.exports = factory
        : typeof define === 'function' && define.amd 
            ? define(factory)
            : (global.Vue = factory())
})(this,function(){
    'use strict'
})

自执行函数想必不用我多说了,让我们来分析下这种插件与框架的写法。

它的参数为global和factory,在js环境下也就是window和Vue的构造函数。this在这里值window,如果经常看源码,就会发现很多插件会判断下 typeof window !== undefined ? window : this;这种写法更偏向于在js的window全局环境中使用。

接着看对外输出factory,首先判断 module和exports存在的情况( typeof exports === 'object' && typeof module !== 'undefined'),也就是优先使用AMD(module.exports = factory),接着判断CMD是否存在(typeof define === 'function' && define.amd ),若AMD不存在而CMD存在,则使用CMD(define(factory)),若AMD,CMD都不存在,就把Vue的构造函数挂载再全局对象上(global.Vue = factory());

Logo

前往低代码交流专区

更多推荐