• 读 Webpack 生成的 umd 模块代码


    webpackUniversalModuleDefinition

    通用模块定义:

    (function webpackUniversalModuleDefinition(root, factory) {
    	if(typeof exports === 'object' && typeof module === 'object') // CommonJS模块, 以及ES Modules模块
    		module.exports = factory();
    	else if(typeof define === 'function' && define.amd) // AMD模块
    		define([], factory);
    	else { // web或其它, 导出到exports对象或global
    		var a = factory();
    		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
    	}
    })(global, function() {
    return /******/ (() => { // webpackBootstrap
    /******/ 	"use strict";
    

    为什么module.exports = factory();也可以用于ES Modules模块呢?

    以module.exports = xxx;赋值语句导出ES Modules模块

    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "fetchPublicIP": () => /* reexport safe */ _network__WEBPACK_IMPORTED_MODULE_0__.fetchPublicIP,
    /* harmony export */   "ip": () => /* reexport safe */ _network__WEBPACK_IMPORTED_MODULE_0__.ip,
    /* harmony export */   "default": () => /* reexport safe */ _network__WEBPACK_IMPORTED_MODULE_0__.default
    /* harmony export */ });
    
    Object [Module] { // 首先, 定义toStringTag符号值为"Module": Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 
      fetchPublicIP: [Getter], // 其次, 由__webpack_require__.d()定义特殊getter而不是分配属性: Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
      ip: [Getter],
    // commonjs也是以上两步处理的, 如果使用了默认导出就会多一个default getter字段而已.
      default: [Getter] // 定义默认导出
    }
    

    __webpack_require__.d是什么呢?

    /******/ 	/* webpack/runtime/define property getters */
    /******/ 	(() => {
    /******/ 		// define getter functions for harmony exports
    /******/ 		__webpack_require__.d = (exports, definition) => {
    /******/ 			for(var key in definition) {
    /******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
    /******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
    /******/ 				}
    /******/ 			}
    /******/ 		};
    /******/ 	})();
    

    其它:

    /******/ 	/* webpack/runtime/compat get default export */
    /******/ 	(() => {
    /******/ 		// getDefaultExport function for compatibility with non-harmony modules
    /******/ 		__webpack_require__.n = (module) => {
    /******/ 			var getter = module && module.__esModule ?
    /******/ 				() => module['default'] :
    /******/ 				() => module;
    /******/ 			__webpack_require__.d(getter, { a: getter });
    /******/ 			return getter;
    /******/ 		};
    /******/ 	})();
    /******/ 	
    /******/ 	/* webpack/runtime/define property getters */
    /******/ 	(() => {
    /******/ 		// define getter functions for harmony exports
    /******/ 		__webpack_require__.d = (exports, definition) => {
    /******/ 			for(var key in definition) {
    /******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
    /******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
    /******/ 				}
    /******/ 			}
    /******/ 		};
    /******/ 	})();
    /******/ 	
    /******/ 	/* webpack/runtime/hasOwnProperty shorthand */
    /******/ 	(() => {
    /******/ 		__webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)
    /******/ 	})();
    /******/ 	
    /******/ 	/* webpack/runtime/make namespace object */
    /******/ 	(() => {
    /******/ 		// define __esModule on exports
    /******/ 		__webpack_require__.r = (exports) => {
    /******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
    /******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
    /******/ 			}
    /******/ 			Object.defineProperty(exports, '__esModule', { value: true });
    /******/ 		};
    /******/ 	})();
    

    全部代码

    (function webpackUniversalModuleDefinition(root, factory) {
    	if(typeof exports === 'object' && typeof module === 'object')
    		module.exports = factory();
    	else if(typeof define === 'function' && define.amd)
    		define([], factory);
    	else {
    		var a = factory();
    		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
    	}
    })(global, function() {
    return /******/ (() => { // webpackBootstrap
    /******/ 	"use strict";
    /******/ 	var __webpack_modules__ = ([
    /* 0 */,
    /* 1 */
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "fetchPublicIP": () => /* reexport safe */ _network__WEBPACK_IMPORTED_MODULE_0__.fetchPublicIP,
    /* harmony export */   "ip": () => /* reexport safe */ _network__WEBPACK_IMPORTED_MODULE_0__.ip,
    /* harmony export */   "default": () => /* reexport safe */ _network__WEBPACK_IMPORTED_MODULE_0__.default
    /* harmony export */ });
    /* harmony import */ var _network__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
    /**
     * 以cjs和default两种方式导出Node.js平台相关API
     */
    // 网络相关API
    // 分别使用cjs路由、默认路由两种方式导出
    
     // commonjs语法导出,IDE无法提示。
    // 在tsconfig.js中启用"compilerOptions": { "declaration": true }时甚至会警告。
    // module.exports = {
    // ...require('./network'), // 网络相关API
    // };
    
    /***/ }),
    /* 2 */
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "ip": () => /* reexport safe */ _ip__WEBPACK_IMPORTED_MODULE_0__.default,
    /* harmony export */   "fetchPublicIP": () => /* reexport safe */ _public_ip__WEBPACK_IMPORTED_MODULE_1__.default,
    /* harmony export */   "default": () => __WEBPACK_DEFAULT_EXPORT__
    /* harmony export */ });
    /* harmony import */ var _ip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3);
    /* harmony import */ var _public_ip__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
    
     // cjs导出
    
     // 默认导出
    
    /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
      ip: _ip__WEBPACK_IMPORTED_MODULE_0__.default,
      fetchPublicIP: _public_ip__WEBPACK_IMPORTED_MODULE_1__.default
    });
    
    /***/ }),
    /* 3 */
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "default": () => __WEBPACK_DEFAULT_EXPORT__
    /* harmony export */ });
    /* harmony import */ var os__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
    /* harmony import */ var os__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(os__WEBPACK_IMPORTED_MODULE_0__);
    
    /**
     * 获取本地网卡的IPv4和IPv6地址,本地回环地址127和::1除外
     */
    
    function ip() {
      let nis = os__WEBPACK_IMPORTED_MODULE_0__.networkInterfaces();
      let ips = {
        ipv4: [],
        ipv6: []
      };
    
      for (let name in nis) {
        let ni = nis[name];
        ni.forEach(it => {
          if (it.address.match(/^(::1|127.0..*)$/)) {
            // console.log(`本地环回地址:${it.address}`);
            return;
          }
    
          switch (it.family) {
            case 'IPv4':
              {
                ips.ipv4.push(it.address);
                break;
              }
    
            case 'IPv6':
              {
                ips.ipv6.push(it.address);
                break;
              }
          }
        });
      }
    
      return ips;
    }
    
    /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ip);
    
    /***/ }),
    /* 4 */
    /***/ ((module) => {
    
    module.exports = require("os");;
    
    /***/ }),
    /* 5 */
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "default": () => __WEBPACK_DEFAULT_EXPORT__
    /* harmony export */ });
    /**
     * 使用CloudFlare Worker API获取公共网络IP地址
     */
    function fetchPublicIP() {
      return Promise.resolve('Unknown IP address');
    }
    
    /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (fetchPublicIP);
    
    /***/ })
    /******/ 	]);
    /************************************************************************/
    /******/ 	// The module cache
    /******/ 	var __webpack_module_cache__ = {};
    /******/ 	
    /******/ 	// The require function
    /******/ 	function __webpack_require__(moduleId) {
    /******/ 		// Check if module is in cache
    /******/ 		if(__webpack_module_cache__[moduleId]) {
    /******/ 			return __webpack_module_cache__[moduleId].exports;
    /******/ 		}
    /******/ 		// Create a new module (and put it into the cache)
    /******/ 		var module = __webpack_module_cache__[moduleId] = {
    /******/ 			// no module.id needed
    /******/ 			// no module.loaded needed
    /******/ 			exports: {}
    /******/ 		};
    /******/ 	
    /******/ 		// Execute the module function
    /******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
    /******/ 	
    /******/ 		// Return the exports of the module
    /******/ 		return module.exports;
    /******/ 	}
    /******/ 	
    /************************************************************************/
    /******/ 	/* webpack/runtime/compat get default export */
    /******/ 	(() => {
    /******/ 		// getDefaultExport function for compatibility with non-harmony modules
    /******/ 		__webpack_require__.n = (module) => {
    /******/ 			var getter = module && module.__esModule ?
    /******/ 				() => module['default'] :
    /******/ 				() => module;
    /******/ 			__webpack_require__.d(getter, { a: getter });
    /******/ 			return getter;
    /******/ 		};
    /******/ 	})();
    /******/ 	
    /******/ 	/* webpack/runtime/define property getters */
    /******/ 	(() => {
    /******/ 		// define getter functions for harmony exports
    /******/ 		__webpack_require__.d = (exports, definition) => {
    /******/ 			for(var key in definition) {
    /******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
    /******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
    /******/ 				}
    /******/ 			}
    /******/ 		};
    /******/ 	})();
    /******/ 	
    /******/ 	/* webpack/runtime/hasOwnProperty shorthand */
    /******/ 	(() => {
    /******/ 		__webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)
    /******/ 	})();
    /******/ 	
    /******/ 	/* webpack/runtime/make namespace object */
    /******/ 	(() => {
    /******/ 		// define __esModule on exports
    /******/ 		__webpack_require__.r = (exports) => {
    /******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
    /******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
    /******/ 			}
    /******/ 			Object.defineProperty(exports, '__esModule', { value: true });
    /******/ 		};
    /******/ 	})();
    /******/ 	
    /************************************************************************/
    /******/ 	// module exports must be returned from runtime so entry inlining is disabled
    /******/ 	// startup
    /******/ 	// Load entry module and return exports
    /******/ 	return __webpack_require__(1);
    /******/ })()
    ;
    });
    
  • 相关阅读:
    memcached命令
    模块管理常规功能自己定义系统的设计与实现(14--模块图表分析的设计)
    [易飞]凭证设计扩展字段之内容-文字显示格式
    将替代ListView的RecyclerView 的使用(一)
    POJ 2049— Finding Nemo(三维BFS)10/200
    最好用的jquery列表拖动排列(由项目提取)
    编程算法
    java几个easy出错的小程序
    GoldenGate配置(三)之DDL复制配置
    aused by: org.apache.xmlbeans.SchemaTypeLoaderException: XML-BEANS compiled schema: Incompatible min
  • 原文地址:https://www.cnblogs.com/develon/p/13894457.html
Copyright © 2020-2023  润新知