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
把这个文件包起来,然后返回这个文件内容,这样的话,就可以需要的时候进行注入了。