RequireJS是怎样实现的?
RequireJS会一次加载所有文件,然后把它们保存起来,以备将来使用。它并行加载所有文件,然后 sequenced in the order mentioned in the config file or normal definition file.
RequireJS最强大的地方就在于:
- 加载一个文件
- 创建一个对象然后 inject 它
加载一个文件
加载文件就是 attaching 一个script脚本,src指向你的文件,这将会通过require()函数被触发。所有的脚本都有onchange事件,当一个文件被加载的时候,onchange事件被触发,然后被保存成一个变量,这个变量将会被define()函数按需使用。当所有依赖都被解析之后,所有加载的文件将会依照它们被调用的顺序和一个它所创建的map安排
inject
你一定注意到了,所有的能被加载的文件都是AMD。其要做的事情被封装进一个define函数中,然后这个函数返回一些东西。这可以防止变量/业务对象暴露到window上。你在AMD模块中写的任何东西的作用域都限制在define函数中,当在另外一个函数中 injected as 一个对象的时候,它将会被使用。当这个文件被加载完毕的时候,返回的这个值将会被存储在上面所说的地方。
Shimming 是一种不同的技术。如果你加载不是AMD的JavaScript文件,这个时候RequireJS将会用一个function把这个文件包起来,然后返回这个文件内容,这样的话,就可以需要的时候进行注入了。