源码文件如下

// common.jsmodule.exports = 'common';// index.jslet str = require('./common.js');console.log(str);
就是在 index.js 中引入 common.js 模块, 简单看看webpack是怎么处理模块引用
输出代码
在 dist 目录下获得通过上一节生成的 bundle.js 文件, 去掉多余的注释和目前没用的声明:
(function(modules) { // webpackBootstrap// The module cache// 代码模块缓存池, 将执行过的代码模块缓存起来var installedModules = {};// The require function// 实现模块化代码的主要函数, 通过以文件名为模块id(moduleId)递归调用function __webpack_require__(moduleId) {// Check if module is in cache// 若模块已缓存, 则直接调用if(installedModules[moduleId]) {return installedModules[moduleId].exports;}// Create a new module (and put it into the cache)// 创建新的模块代码, 并把模块缓存var module = installedModules[moduleId] = {i: moduleId,l: false,exports: {}};// Execute the module function// 执行对应模块id的代码, 并将模块对象和方法绑定到当前module上modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);// Flag the module as loaded// 将模块已加载标识置为truemodule.l = true;// Return the exports of the module// 返回模块对外暴露方法return module.exports;}// 代码启动, 传入入口文件的模块idreturn __webpack_require__(__webpack_require__.s = "./src/index.js");})({"./src/common.js": (function(module, exports) {eval("module.exports = 'common';\r\n\n\n//# sourceURL=webpack:///./src/common.js?");}),"./src/index.js": (function(module, exports, __webpack_require__) {eval("let str = __webpack_require__(/*! ./common.js */ \"./src/common.js\");\r\nconsole.log(str);\n\n//# sourceURL=webpack:///./src/index.js?");})});
这段代码可以直接在浏览器中控制台执行
整体代码流程就是创建一个自执行函数, 根据文件名称递归调用内部函数 __webpack_require__(moduleId) , 从而把代码模块化
- line 37: 代码开始启动, 调用
__webpack_require__并传入入口文件模块id./src/index.js - line 17-21: 创建模块
./src/index.js并缓存至installedModules - line 25, line 43-45: 将上一步创建的模块传入
./src/index.js执行函数 - line 44:
./src/index.js执行函数中又执行了__webpack_require__(\"./src/common.js\") - line 17-21: 类似第二步, 创建并缓存模块
./src/common.js - line 25, line 40-42: 将上一步创建的模块传入
./src/common.js执行函数 - line 41: 执行
module.exports = 'common'即定义./src/common.js模块的exports - line 29, 33: 设置
./src/commom.js模块已加载, 返回module.exports - line 44: 拿到模块
./src/common.js暴露的结果, 继续执行函数, 打印common - line 29, 33: 设置
./src/index.js模块已加载, 返回module.exports - 执行完成
