提交 74c42f90 编写于 作者: 5 592767809

新增一个案例

上级 445873b7
此差异已折叠。
node webpack_mixer.js -l app.bundle.js -o webpack_out.js
\ No newline at end of file
navigator = {
userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
};
let n = require('./webpack_out');
let a = n(29);
console.log(a);
let data = `ZTA4NDVlYjE5Nnic7VzZctu4Ev0aPVqFHd2PlGz/hgsbHd/Ykq8lZybz9bcB
LqIlUqG3OFN1qxSaIiGwsZ1zutHMwq4WQuz2bv+8o5OFrOi4/Z5PxZqOD2m3
c7epv9XfeEq75/t9e71Ucn+3677rVXPpLjYXuAKjUTe/jHdu83i3ub3p7tKR
c27Bcs37+u+3m9u7/XNsH825XCrJmdGADLlE1RZz+0EpIZYclTIWgTHFuWkK
bdzDoAVXelGpRVXlkxUuVnJxZRYrtYBVvoJigaacUDEyB/I5XC7gqpxcL5CX
8iz/JNcgFqtSZlUt0C4EHrrubnPz5Pbtk9mybf7jt+3mYA0YsAoOzf4r3d1+
a7sRltRtXDY3dtvnp5CGfSZqraNIQjmBKsQaUdRok1cgEYz1fZ3e7RJZsvne
WcK0Nsra9i7diW/tnc5qd/fg7m52zw8P7ulnU9nm+f6+uRvu9j9vjsbA5q6s
WKmcHmT7qtyP25vHp7vQFlZiydoO2LundopiWzRGmoW7c7W2raETXFAvo5QA
0A5kvj02kKeDjaVYWxeW5q/pylosl8ve8EBDfbt9OmnpSaflmq8WoPtfUt/d
ppvnp/v+V9/2+8ddOb2mz93D7ZJ6eJ//Pbqfy7B9oKvhm6MJVkbv5i5sN6Ws
psqFJjPpUHVfaRjpIPNXk8/yXRrO9i5ZRwfTfy0V8OV/Hm97AyOtbLcJh1bJ
JXx/ONi/u/nh7u/izWb7V1Nk//ScOpggax+yjT+2z+Fb6obwBCLoiB7A1CBM
0Dpwaa133kvFNFfeJl33D2yrovn2+Hh/Rycvuvyf3e5bX5TQ4X44GmqxWi0q
WeaDLcNLowF55HNxpvNwA61kyKXtZb56bGaKKrAUJVjGnDIgo45GMo7aBpS1
nWnm8+Zuu6HhPGfqOhuSLZJlVquyIlk7SVs8ZWZpZ1iNzom6VjxqnmoFgVtr
a52U0cJyU+uZVtMyj27j3butxqWa09eyji5IVkfrMSqu0KOrMTIRCOdCnGk1
zc5zPV2WOqyLqVX+5BNoIS/DATUHcoFVWcaVzkhPM4jWGbLWeH05MeF7kwYz
/8Sik8lw0s/drO6eQ2sybJ83+wHF6KM7+5+PLwaur+vUxn36e7/4uFXCFROI
Vhs2TfnWCJTEU7I3a4TypTFZE4wzvSY0H2d4zDjbjyOBNQ1fdVUmoV2srgq+
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`;
console.log(a.decodeData(data));
process.exit(0);
const parser = require("@babel/parser");
const t = require("@babel/types");
const generator = require("@babel/generator");
const traverse = require("@babel/traverse").default;
const fs = require("fs");
function wtofile(path, flags, code) {
var fd = fs.openSync(path,flags);
fs.writeSync(fd, code);
fs.closeSync(fd);
}
function run(loader_path, out_path, modular_path) {
let js_code = fs.readFileSync(loader_path, {
encoding: "utf-8"
});
// 转换为AST语法树
let loader_ast = parser.parse(js_code);
// 获取加载器代码
let loader_body;
if (loader_ast.program.body[0].expression.type === 'UnaryExpression'){
loader_body = loader_ast.program.body[0].expression.argument.callee.body.body;
}else{
loader_body = loader_ast.program.body[0].expression.callee.body.body;
}
let export_function = null;
traverse(loader_ast, {
FunctionDeclaration(path){
if(path.toString().includes("exports:") && export_function == null){
export_function = path.node.id.name
}
}
});
if(export_function == null){
throw "未找到导出函数错误"
}
for (let i = 0; i < loader_body.length; i++){
let item = loader_body[i];
if(item.type === 'ExpressionStatement'){
if(item.expression.type === 'SequenceExpression' && item.expression.expressions[0].type === 'AssignmentExpression' && item.expression.expressions[0].left.type === 'MemberExpression' && item.expression.expressions[0].left.object.type === 'Identifier' && item.expression.expressions[0].left.object.name === export_function){
let j = 1;
while (j < item.expression.expressions.length){
let item2 = item.expression.expressions[j];
if(item2.left &&item2.left.type === 'MemberExpression' && item2.left.object.type === 'Identifier' && item2.left.object.name === export_function){
j++
}else{
item.expression.expressions.splice(j, item.expression.expressions.length - j);
break
}
}
loader_body.splice(i + 1, loader_body.length - i - 1);
loader_body.push(t.expressionStatement(t.assignmentExpression("=", t.identifier("export_function"), t.identifier(export_function))));
}
}else if(item.type === 'ReturnStatement'){
loader_body[i] = t.expressionStatement(item.argument);
let j = 0;
while (j < loader_body[i].expression.expressions.length){
let item2 = loader_body[i].expression.expressions[j];
if(item2.left &&item2.left.type === 'MemberExpression' && item2.left.object.type === 'Identifier' && item2.left.object.name === export_function){
j++
}else{
loader_body[i].expression.expressions.splice(j, loader_body[i].expression.expressions.length - j);
break
}
}
loader_body.push(t.expressionStatement(t.assignmentExpression("=", t.identifier("export_function"), t.identifier(export_function))));
}
}
// 导入加载器中的函数体
let loader_arguments;
if (loader_ast.program.body[0].expression.type === 'UnaryExpression'){
loader_arguments = loader_ast.program.body[0].expression.argument.arguments[0];
}else{
loader_arguments = loader_ast.program.body[0].expression.arguments[0];
}
if (loader_arguments.type === 'ArrayExpression'){
let tempobjectexpression = t.objectExpression([]);
loader_arguments.elements.forEach(function (item, index) {
if (item && item.type === 'FunctionExpression'){
tempobjectexpression.properties.push(t.objectProperty(
t.numericLiteral(index),
item,
false,
false
));
}
});
loader_arguments = tempobjectexpression;
}
// 加载外部函数体
modular_path.forEach(function (item, index) {
var jscode = fs.readFileSync(item, {
encoding: "utf-8"
});
let modular_ast = parser.parse(jscode);
modular_ast.program.body[0].expression.arguments[0].elements.forEach(function (item2, index2) {
if (item2.type === 'ArrayExpression'){
item2.elements.forEach(function (item3, index3) {
if (item3 && item3.type === 'FunctionExpression'){
loader_arguments.properties.push(t.objectProperty(
t.numericLiteral(index3),
item3,
false,
false
));
}
});
}else {
item2.properties.forEach(function (item3, index3) {
loader_arguments.properties.push(item3)
})
}
});
});
if (loader_ast.program.body[0].expression.type === 'UnaryExpression'){
loader_ast.program.body[0].expression.argument.arguments[0] = loader_arguments;
}else{
loader_ast.program.body[0].expression.arguments[0] = loader_arguments;
}
// 申请全局导出函数
loader_ast.program.body.splice(0, 0, t.variableDeclaration("var",[t.variableDeclarator(t.identifier("export_function"))]));
// 导出函数
loader_ast.program.body.push(t.expressionStatement(t.assignmentExpression("=", t.memberExpression(t.identifier("module"), t.identifier("exports"), false), t.identifier("export_function"))));
let code = generator.default(loader_ast, {
compact: false, // 压缩格式
comments: false, // 注释
jsescOption: {
minimal: false // 转义
}
}).code;
wtofile(out_path, 'w', code);
}
!function () {
let loader_path, out_path;
let modular_path = [];
for(let i = 0; i < process.argv.length; i++){
if (process.argv[i] === '-l'){
loader_path = process.argv[i + 1];
i += 1;
}else if(process.argv[i] === '-m'){
modular_path.push(process.argv[i + 1]);
i += 1;
}else if(process.argv[i] === '-o'){
out_path = process.argv[i + 1];
i += 1;
}
}
if (loader_path && out_path){
run(loader_path, out_path, modular_path)
}
}();
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册