Webpack运行时runtime做了什么事情

webpack 的 runtime,也就是 webpack 最后生成的代码,实现了一个自定义的模块加载系统,替代浏览器原生的模块机制

webpack_modules

维护一个所有模块的数组。将入口模块解析为 AST,根据 AST 深度优先搜索所有的模块,并构建出这个模块数组。每个模块都由一个包裹函数 (module, module.exports, webpack_require) 对模块进行包裹构成。

webpack_require(moduleId)

手动实现加载一个模块。对已加载过的模块进行缓存,对未加载过的模块,执行 id 定位到

webpack_modules

webpack_modules中的包裹函数,执行并返回 module.exports,并缓存

webpack_require(0)

webpack_require_(0)运行第一个模块,即运行入口模块,另外,当涉及到多个 chunk 的打包方式中,比如 code spliting,webpack 中会有 jsonp 加载 chunk 的运行时代码。