加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

浅谈 Webpack 背后的运行机制

发布时间:2019-08-16 05:05:38 所属栏目:建站 来源:Alan
导读:副标题#e# 在平时开发中我们经常会用到 Webpack这个时下最流行的前端打包工具。它打包开发代码,输出能在各种浏览器运行的代码,提升了开发至发布过程的效率。 我们知道一份 Webpack配置文件主要包含入口( entry)、输出文件( output)、模式、加载器( Loader

IIFE 传入的 modules 对象里多了一个键值对,对应着新模块 src/utils/math.js,这和我们在源代码中拆分的模块互相呼应。然而,有了 modules 只是第一步,这份文件最终达到的效果应该是让各个模块按开发者编排的顺序运行。

探究 webpackBootstrap

接下来看看 webpackBootstrap 函数中有些什么:

  1. // webpackBootstrap 
  2. (function(modules){ 
  3. // 缓存 __webpack_require__ 函数加载过的模块 
  4. var installedModules = {}; 
  5. /** 
  6. * Webpack 加载函数,用来加载 webpack 定义的模块 
  7. * @param {String} moduleId 模块 ID,一般为模块的源码路径,如 "./src/index.js" 
  8. * @returns {Object} exports 导出对象 
  9. */ 
  10. function __webpack_require__(moduleId) { 
  11. // ... 
  12. // 在 __webpack_require__ 函数对象上挂载一些变量及函数 ... 
  13. // 传入表达式的值为 "./src/index.js" 
  14. return __webpack_require__(__webpack_require__.s = "./src/index.js"); 
  15. })(/* modules */); 

可以看到其实主要做了两件事:

  1. 定义一个模块加载函数 __webpack_require__。
  2. 使用加载函数加载入口模块 "./src/index.js"。

整个 webpackBootstrap 中只出现了入口模块的影子,那其他模块又是如何加载的呢?我们顺着 __webpack_require__("./src/index.js") 细看加载函数的内部逻辑:

  1. function __webpack_require__(moduleId) { 
  2. // 重复加载则利用缓存 
  3. if (installedModules[moduleId]) { 
  4. return installedModules[moduleId].exports; 
  5. // 如果是第一次加载,则初始化模块对象,并缓存 
  6. var module = installedModules[moduleId] = { 
  7. i: moduleId, // 模块 ID 
  8. l: false, // 模块加载标识 
  9. exports: {} // 模块导出对象 
  10. }; 
  11. /** 
  12. * 执行模块 
  13. * @param module.exports -- 模块导出对象引用,改变模块包裹函数内部的 this 指向 
  14. * @param module -- 当前模块对象引用 
  15. * @param module.exports -- 模块导出对象引用 
  16. * @param __webpack_require__ -- 用于在模块中加载其他模块 
  17. */ 
  18. modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 
  19. // 模块加载标识置为已加载 
  20. module.l = true; 
  21. // 返回当前模块的导出对象引用 
  22. return module.exports; 

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读