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.修复加载器
自己编写个加载器