核心是 js 的加载模块,通过正则匹配模块以及模块的依赖关系,保证文件加载的先后顺序,根据文件的路径对加载过的文件做了缓存
补充
补充:RequireJS 的核心原理可以拆成三块:
- 依赖解析 :使用
deps数组收集当前模块依赖,结合baseUrl/paths配置把模块名解析为真实 URL。- 动态加载 :通过动态创建
<script>标签并设置 src,按依赖顺序依次加载;脚本执行完后立即removeChild。- 避免重复加载 :维护一个
moduleStore(或scriptLoading队列),每个 URL 只发一次请求;后续模块依赖同一文件时直接复用已加载完成的回调(Promise 化的依赖收集器)。
简化版伪代码示意:
const moduleStore = {}
function loadModule(name, cb) {
if (moduleStore[name]) return cb(moduleStore[name].exports)
const script = document.createElement('script')
script.src = requirejs.toUrl(name)
script.onload = () => {
moduleStore[name] = { exports: define.amd ? require(name) : window[name] }
cb(moduleStore[name].exports)
}
document.head.appendChild(script)
}
来源整理自:vue3js.cn 面试官系列



