webpack-autojs-loader
Version:
用于webpack打包时, autojs文件的预处理, 这是一个loader
147 lines (126 loc) • 4.25 kB
JavaScript
/*
* @Author: 家
* @QQ: 203118908
* @QQ交流群: 1019208967
* @bilibili: 晓宇小凡
* @versioin: 1.0
* @Date: 2020-05-03 14:40:27
* @LastEditTime: 2020-09-20 22:35:50
* @LastEditors: 家
* @Description: 用于webpack的loader 预处理autojs格式的文件
* @学习格言: 即用即学, 即学即用
*/
const process = require('process')
console.log = () => {};
var 替换双花括号 = function() {
console.log(arguments);
var str = arguments[0];
console.log("str=");
console.log(str);
while (1) {
if (/\{\{(?!this).*?\}\}/.test(str)) {
console.log("有 双 花括号");
str = str.replace(/\{\{(?!this)(.*?)\}\}/, "$${$1}");
} else {
console.log("没 双 花括号");
break;
}
}
return str;
};
var 替换双花括号_xml添加反引号 = function() {
console.log(arguments);
var str = arguments[0];
console.log("str=");
console.log(str);
while (1) {
if (/<.*\/>(?!`)/.test(str)) {
console.log("有 双 花括号");
str = str.replace(/(<.*\/>)/, "`$1`");
} else {
console.log("没 双 花括号");
break;
}
}
console.log(str)
// TODO: 替换自定义控件
// process.exit()
return str;
};
var 去掉单引号 = function() {
console.log(arguments);
var str = arguments[0];
console.log("str=");
console.log(str);
while (1) {
if (/'/.test(str)) {
str = str.replace(/'/g, "");
} else {
break;
}
}
while (1) {
if (/['"]\s*<.*?>\s*['"]/.test(str)) {
str = str.replace(/['"]\s*(<.*?>)\s*['"]/g, "$1");
} else {
break;
}
}
return str;
};
var xml添加反引号 = function(content) {
// return content.replace(/ui.layout\((.*?)\)/g, "ui.layout(`$1`)")
console.log("xml添加反引号 开始");
var result = content;
console.log("添加美元符号之前, content=");
console.log(content);
result = content;
result = result.replace(/ui\.layout\([^()]*?\)/gm, 替换双花括号);
result = result.replace(/floaty\.rawWindow\([^()]*?\)/gm, 替换双花括号);
result = result.replace(/floaty\.window\([^()]*?\)/gm, 替换双花括号);
result = result.replace(/ui\.inflate\(([^()]+?),([^()]+?)\)/gm, 替换双花括号);
result = result.replace(/ui\.inflate\(([^(,)]+?)\)/gm, 替换双花括号);
result = result.replace(/\.prototype\.render ?= ?function ?\(\) ?{([\s\S]*?)}/gm, 替换双花括号_xml添加反引号);
console.log("添加美元符号之后, result=");
console.log(result);
result = result.replace(/ui\.layout\(([^()]+?)\)/gm, "ui.layout(`$1`)");
result = result.replace(/floaty\.rawWindow\(([^()]+?)\)/gm, "floaty.rawWindow(`$1`)");
result = result.replace(/floaty\.window\(([^()]+?)\)/gm, "floaty.window(`$1`)");
result = result.replace(/ui\.inflate\(([^()]+?),([^()]+?)\)/gm, "ui.inflate(`$1`,$2)");
result = result.replace(/ui\.inflate\(([^(,)]+?)\)/gm, "ui.inflate(`$1`)");
console.log("添加反引号之后, result=");
console.log(result);
console.log("xml添加反引号 结束");
console.log('将原本就是字符串的布局还原 开始')
console.log('result =')
console.log(result)
var reg=/(ui\.inflate\(`\s*['"][^()]*?)'\s*\+\s*([a-zA-Z_]+)\s*\+\s*'([^()]*?['"]\s*`,[^()]+?\))/
while (1) {
if (reg.test(result)) {
result = result.replace(/(ui\.inflate\(`\s*['"][^()]*?)'\s*\+\s*([a-zA-Z_]+)\s*\+\s*'([^()]*?['"]\s*`,[^()]+?\))/gm, "$1$${$2}$3");
} else {
result = result.replace(/ui\.inflate\(`\s*['"][^()]*?`,[^()]+?\)/gm, 去掉单引号);
break;
}
}
console.log('将原本就是字符串的布局还原 结束')
console.log('result =')
console.log(result)
return result;
};
var someAsyncOperation = function(content, callback) {
var err = "";
try {
content = xml添加反引号(content);
} catch (e) {
err = e;
}
callback(err, content);
};
module.exports = function(content, map, meta) {
var callback = this.async();
someAsyncOperation(content, function(err, result) {
if (err) return callback(err);
callback(null, result, map, meta);
});
};