1.webpack是什么?
Webpack是一个用于构建现代 Web 应用程序的静态模块打包工具。它是一个高度可配置的工具,通过将应用程序的所有资源(例如JavaScript、CSS、图片等)视为模块,并使用依赖关系来管理它们之间的引用,将它们打包成一个或多个最终的静态资源文件
2.webpack逆袭步骤
1.找加载器
- 加载器require
- 模块module
- 导出函数module.exports
- 缓存
- 根据堆栈找到业务代码位置
- 往上走找找到各种定义变量的地方
- 有一个指一直出现那个值就是加载器
- 找到缓存的地方 一定会有 return t[n].exports 后面会有t[n]= 加入到缓存中
2.导出加载器
function e(s) { if (i[s]) return i[s].exports; var n = i[s] = { exports: {}, id: s, loaded: !1 }; if (window.is_log) { // 打印调用函数 简化函数 window.webpack_code = window.webpack_code + s + " : " + t [s] + "," + "\r\n" } return t[s].call(n.exports, n, n.exports, e), //n.exports:this n:缓存 n.exports:导出函数 e:加载器 n.loaded = !0, n.exports }
3.屏蔽初始化 找到初始化位置 注释掉让其不初始化 初始化的一定会调用加载器 找到加载器调用的地方 一般初始化在上面函数的倒数第二行
!function (t) { function e(s) { if (i[s]) return i[s].exports; var n = i[s] = { exports: {}, id: s, loaded: !1 }; return t[s].call(n.exports, n, n.exports, e), n.loaded = !0, n.exports } window.yoyo = e // 导出加载器 保存为全局变量 var i = {}; return e.m = t, e.c = i, e.p = "" // e(0) // 注释初始化 }()
4.加载指定模块
function get_pwd(pwd) { let yoyo1 = window.yoyo(3); // 加载指定模块 let yoyo2 = new yoyo1; let r = { t:(new Date).getDate() } r.p = yoyo2.encode(pwd, r.t); return r; } get_pwd("123")
5.编写自定义函数
function get_pwd(pwd) { // 自定义函数编写 let yoyo1 = window.yoyo(3); // 加载指定模块 let yoyo2 = new yoyo1; let r = { t:(new Date).getDate() } r.p = yoyo2.encode(pwd, r.t); return r; } get_pwd("123")
6.修改加载器简化模块
window.is_log = false; // 控制开关 window.webpack_code = ""; // 保存webpack 使用的code !function (t) { function e(s) { if (i[s]) return i[s].exports; var n = i[s] = { exports: {}, id: s, loaded: !1 }; if (window.is_log) { // 打印调用函数 简化函数 window.webpack_code = window.webpack_code + s + " : " + t [s] + "," + "\r\n" } return t[s].call(n.exports, n, n.exports, e), n.loaded = !0, n.exports } window.yoyo = e // 导出加载器 保存为全局变量 var i = {}; return e.m = t, e.c = i, e.p = "" // e(0) // 注释初始化 }() function get_pwd(pwd) { window.isok = true let yoyo1 = window.yoyo(3); // 加载指定模块 let yoyo2 = new yoyo1; let r = { t: (new Date).getDate() } r.p = yoyo2.encode(pwd, r.t); window.isok = false; return r; } get_pwd("123")
7.修复加载器
自己编写个加载器