Requirejs原理分析-70行实现简Requirejs

模块化介绍

模块化:对功能点的封装和集成
分类:

AMD:

主要是前置依赖,在调用之前把所有的依赖加载完成

主要是是requirejs

在window上面添加了全局方法 define/require

CMD 

主要是就近依赖,调用的时候可以加载

主要seajs

window主要定义了 define 方法,在函数内部传入了 exports/require 来实现依赖

Commanjs

同步加载,执行阶段完成,主要用于 node

在 global 上面定了 exports/requrie/module 对象

ES6

主要在编译阶段执行

全局有 export/import

实现一个简易的 requirejs
 const loadScript = (url, ck) => {
            const node = document.createElement('script');
            node.type = 'text/javascript';
            node.charset = 'utf-8';
            node.async = true;
            document.querySelector('head').appendChild(node)
            node.src = url;
            node.onload = () => {}
        }
        let moduleName = 'entry'
        let depName = 'entry'
        window.define = function (depends, func) {
            new Module(depName, depends, func)
        }
        const modules = {}
        class Module {
            constructor(name, depends, func) {
                this.func = func
                this.name = name
                this.depends = depends
                this.deps = []
                this.parent = moduleName
                modules[depName] = this
                if (depends.length < 1) {
                    const res = func()
                    const module = modules[moduleName]
                    module.resolve(this.name, res)
                } else {
                    let item = depends.shift()
                    depName = item
                    moduleName = this.name
                    loadScript(item, () => {
                    })
                }
            }

            resolve(name, module) {
                this.deps.push(module)
                if (this.depends.length > 0) {
                    let item = this.depends.shift()
                    depName = item
                    moduleName = this.name
                    loadScript(item, () => {
                    })
                } else {
                    const res = this.func.apply(null, this.deps)

                    if (this.name === this.parent) return
                    const module = modules[this.parent]
                    module.resolve(this.name, res)
                }
            }
        }
        window.require = function (depends = [], func) {
            const module = new Module(moduleName, depends, func)
        }
        require(['./test.js', './test4.js'], (t1, t2) => {
            console.log('end' + t1 + t2)
        })

       代码主要实现了各个js的依赖加载,并未加工处理路径/名称/缓存等

  仅供学习使用。。!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值