【前端必会】webpack的目标代码
背景
webpack生成什么样的代码呢?同的模块依赖的写法(import、export export default),会导致生成代码的不同,下面介绍普通的import与export
开始
导出PI1,max
//index.js
let PI1 = 3.1415926;
let PI2 = 3.1415926;
function max(a, b) {
  return a > b ? a : b;
}
console.log(PI2);
export { max, PI1 };
导出PI3,max
//index2.js
let PI3 = 3.1415926;
let PI4 = 3.1415926;
function max(a, b) {
  return a > b ? a : b;
}
console.log(PI4);
export { max, PI3 };
导出默认
//index3.js
export default {
  name: "默认模块",
};
主文件如下
//main.js
import { max, PI1 } from "./index";
import { max as max2, PI as PI2 } from "./index2";
import index3 from "./index3";
!(function () {
  console.log(max(1, 2), PI1);
  console.log(max2(3, 4), PI2);
  console.log(index3);
})();
生成代码如下
//bundle.js
/******/ (function() { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/
/************************************************************************/
/******/ 	/* webpack/runtime/define property getters */
/******/ 	!function() {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = function(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 */
/******/ 	!function() {
/******/ 		__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ 	}();
/******/
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	!function() {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = function(exports) {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	}();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// NAMESPACE OBJECT: ./src/index2.js
var index2_namespaceObject = {};
__webpack_require__.r(index2_namespaceObject);
__webpack_require__.d(index2_namespaceObject, {
  "F": function() { return index2_max; }
});
;// CONCATENATED MODULE: ./src/index.js
let PI1 = 3.1415926;
let PI2 = 3.1415926;
function max(a, b) {
  return a > b ? a : b;
}
console.log(PI2);
;// CONCATENATED MODULE: ./src/index2.js
let PI3 = 3.1415926;
let PI4 = 3.1415926;
function index2_max(a, b) {
  return a > b ? a : b;
}
console.log(PI4);
;// CONCATENATED MODULE: ./src/index3.js
/* harmony default export */ var index3 = ({
  name: "默认模块",
});
;// CONCATENATED MODULE: ./src/main.js
!(function () {
  console.log(max(1, 2), PI1);
  console.log(index2_max(3, 4), index2_namespaceObject.PI);
  console.log(index3);
})();
/******/ })()
;
总结
- webpack_require 有r、o、d函数(后续还会有m、c、t、n、p等等)
- 一个文件如果没有吧所有的变量都导出,会生成一个namespaceObject对象(exports对象),里面存放导出的变量、函数
- webpack先通过r函数,初始化exports对象,标识对象为__esModule

- webpack再通过d函数(define),将导出的添加到exports对象中,
  
- 如果代码中没有导出的变量(下图),则将代码修改为取exports对象,这样得到一个undefined
  
- 重复的变量,会在名称前添加文件名
- 每个文件都变成了// CONCATENATED MODULE:(估计还有其他规则)
  
- 如果文件导出了default,也是会直接合并到主代码中。
【前端必会】webpack的目标代码的更多相关文章
- 前端项目模块化的实践2:使用 Webpack 打包基础设施代码
		以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ... 
- [Linux] 一个前端必会的 Nginx 免费教程-在虚拟机中用deepin测试
		原文技术胖的 nginx 技术胖 专注于前端开发 deepin Linux Deepin 是一个基于 DEB 包管理的一个独立操作系统,和那些 Ubuntu(下个大版本是基于 debian 开发) 的 ... 
- input屏蔽历史记录    ;function($,undefined) 前面的分号是什么用处   JSON 和 JSONP 两兄弟   document.body.scrollTop与document.documentElement.scrollTop兼容    URL中的#      网站性能优化    前端必知的ajax    简单理解同步与异步    那些年,我们被耍过的bug——has
		input屏蔽历史记录 设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处 ;(function($){$.ex ... 
- 【前端必会】单页应用-你的新朋友wepack
		背景 我们开发的功能可能是简单的,但是实现功能的代码行数却可能成千上万 出于易于维护.安全.服用,我们会根据我们的经验设计我们的代码,拆解成多个独立的功能模块(代码片段.更多的文件) JS的模块规范有 ... 
- 【前端构建】WebPack实例与前端性能优化
		计划把微信的文章也搬一份上来. 这篇主要介绍一下我在玩Webpack过程中的心得.通过实例介绍WebPack的安装,插件使用及加载策略.感受构建工具给前端优化工作带来的便利. 壹 | Fisrt 曾几 ... 
- 前端模块化工具-webpack
		详解前端模块化工具-webpack webpack是一个module bundler,抛开博大精深的汉字问题,我们暂且管他叫'模块管理工具'.随着js能做的事情越来越多,浏览器.服务器,js似乎无处不 ... 
- 【webpack学习笔记(一)】流行的前端模块化工具webpack初探
		从开发文件到生产文件 有一天我突然意识到一个问题,在使用react框架搭建应用时,我使用到了sass/less,JSX模版以及ES6的语法在编辑器下进行开发,使用这些写法是可以提高开发的效率.可是 ... 
- 前端模块化工具--webpack使用感受
		话说前头 webpack前段时间有听说一下,现在已经到了3.x的版本,自己没去接触.因为之前使用gulp来作为自己的项目构建工具.现在感觉gulp使用的趋势在减少.现在这段时间去接触了webpack, ... 
- 【webpack】流行的前端模块化工具webpack初探
		从开发文件到生产文件 有一天我突然意识到一个问题,在使用react框架搭建应用时,我使用到了sass/less,JSX模版以及ES6的语法在编辑器下进行开发,使用这些写法是可以提高开发的效率.可是 ... 
随机推荐
- 使用开源Cesium+Vue实现倾斜摄影三维展示
			准备工作 VUE开发工具:Visual studio Code 倾斜摄影转换工具:CesiumLab-下载地址:http://www.cesiumlab.com/ 三维显示:Cesium,api参考网 ... 
- DFS序和7种模型
			DFS序就是将树的节点按照先根的顺序遍历得到的节点顺序 性质:一个子树全在一个连续的区间内,可以与线段树和树状数组搭配使用 很好写,只需在dfs中加几行代码即可. 代码: void dfs(ll u, ... 
- 老子云携手福昕鲲鹏,首次实现3D OFD三维版式文档的重大突破
			你见过能动起来的文档吗? 这可不是动图,也不是视频,而是可以直接自由交互3D模型的3D OFD文档! OFD可能有人不熟悉,它其实是国产"PDF",3D OFD则突破了以往文字.图 ... 
- mysql 之full join
			首先,mysql中是不支持full join的,如果要实现类似的功能可以用union all,union会剔除重复.以下是实现实例 create table if not exists t1(`id` ... 
- 别无分号只此一家,Python3接入支付宝身份认证接口( alipay.user.certify)体系(2021年最新攻略)
			原文转载自「刘悦的技术博客」https://v3u.cn/a_id_184 目前国内身份认证体系做的比较不错的大抵就是支付宝和微信两家了,支付宝的身份验证基于支付宝app的实人认证能力,采用多因子认证 ... 
- 高效简单的.Net数据库“访问+操作”技术
			本文技术源自外企,并已在多个世界500强大型项目开发中运用. 本文适合有初步C#.Linq.Sql知识的同学阅读. 相关技术在IDataAccess接口中提供. IDataAccess所在的命名空间是 ... 
- CF1528C Trees of Tranquillity(图论,数据结构)
			题面 有两棵 n n n 个点的有根树 T 1 T_1 T1, T 2 T_2 T2,根是 1 1 1 ,共用编号 1 1 1~ n n n.求最大的点集 S S S 满足每个点在 T 1 T_1 ... 
- HDU2065 “红色病毒”问题  (指数型母函数经典板题)
			题面 医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶, ... 
- HMS Core基于地理位置请求广告,流量变现快人一步
			对于想买车的用户来说,如果走在路上刷社交软件时突然在App里收到一条广告:"前方500米商圈里的某品牌汽车正在做优惠,力度大福利多."不管买不买,八成都会去看看,原因有三:距离近. ... 
- SpringMvc请求流程源码解析
			目录 SpringMvc请求流程图 请求流程粗讲解 方法细讲 doDispatcher --> 核心 找到Handler#getHandler getHandler(request) mappi ... 
