模块和模块之间的交互越来越多, 为了保证调用顺序, 需要人为保障 script 标签的加载顺序
为了解决这个问题, 类似 require seajs 这样的模块 loader 被创造出来, 通过模块..., 不过在这个阶段, 模块 loader 和前端工程流之间尚未有机的结合....直到 nodejs 问世, 前端拥有了自己的包管理工具 npm, 在此基础上 Webpack 进一步推动了前端工程流和模块之间的整合, 随后前端模块化的进程开始稳固下来, 一直保持至今....因为模块必须先加载才能调用并执行, 模块加载器和构建工具就必须管理和分析应用中所有模块的依赖关系, 从而确定哪些模块可以拆分哪些可以合并, 以及模块的加载顺序....如果 A 模块调用 B 模块, 但并不需要 B 模块立即就绪, 这就意味着, 模块加载器可以不关心模块的依赖关系, 而致力于只解决模块加载的效率和性能问题.