feat: 编译器支持wxml引用

This commit is contained in:
msojocs 2022-03-09 22:07:53 +08:00
parent a9446efa16
commit bbfa5b6dc5
71 changed files with 4631 additions and 77 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
x 大小13
引用文件 6,7 下标5,6
9,10
m0 - m9
gz1 - gz11

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,134 @@
#!/usr/bin/env node
const { spawn, spawnSync } = require("child_process");
const path = require("path");
const fs = require("fs");
const { exit } = require("process");
const projectPath = "/mnt/disk1/WeChatProjects/miniprogram-demo/miniprogram/";
const config = [
"-d",
"--split",
">_<109",
"-xc",
"9>_<109./miniprogram_npm/miniprogram-barrage/index.wxml>_<1090>_<109./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxml>_<1090>_<109./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxml>_<1090>_<109./miniprogram_npm/wxml-to-canvas/index.wxml>_<1090>_<109./page/API/index.wxml>_<1091>_<109set-tab-bar>_<109./page/API/components/set-tab-bar/set-tab-bar.wxml>_<1090>_<109./page/cloud/index.wxml>_<1090>_<109./page/component/index.wxml>_<1090>_<109./page/extend/index.wxml>_<1090",
"-lla",
"./miniprogram_npm/miniprogram-barrage/index>_<109./miniprogram_npm/miniprogram-recycle-view/recycle-item>_<109./miniprogram_npm/miniprogram-recycle-view/recycle-view>_<109./miniprogram_npm/wxml-to-canvas/index>_<109./page/API/index>_<109./page/API/components/set-tab-bar/set-tab-bar>_<109./page/cloud/index>_<109./page/component/index>_<109./page/extend/index",
"./miniprogram_npm/miniprogram-barrage/index.wxml",
"./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxml",
"./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxml",
"./miniprogram_npm/wxml-to-canvas/index.wxml",
"./page/API/index.wxml",
"./page/API/components/set-tab-bar/set-tab-bar.wxml",
"./page/cloud/index.wxml",
"./page/common/foot.wxml",
"./page/common/head.wxml",
"./page/component/index.wxml",
"./page/extend/index.wxml",
"-gn",
"$gwx",
];
const test_wine = () => {
const wine = spawn(
path.resolve(__dirname, "../../../../package.nw/js/vendor/wcc.exe"),
config,
{
cwd: projectPath,
}
);
const spwanData = [],
errData = [];
wine.stdout.on("data", (e) => {
spwanData.push(e);
});
wine.stderr.on("data", (e) => {
errData.push(e);
});
return new Promise((resolve, reject) => {
wine.on("close", (n) => {
console.log("wine n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
result = JSON.parse(result);
// result = result.generateFunctionContent["__COMMON__"];
// delete result.generateFunctionContent["__COMMON__"];
result = JSON.stringify(result, null, 4)
fs.writeFileSync(
path.resolve(__dirname, "./3/wine_output.json"),
result
);
// process.stdout.write(result);
resolve(result);
} else {
process.stderr.write(
"wine error:",
Buffer.concat(errData).toString()
);
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
const test_node = () => {
const node_exec = spawn(
path.resolve(__dirname, "../../../nodejs/wcc"),
config,
{
cwd: projectPath,
env: {
WX_DEBUG_COMPILER_OUTPUT: path.resolve(__dirname, "./3"),
},
// stdio: 'inherit'
}
);
const spwanData = [],
errData = [];
node_exec.stdout.on("data", (e) => {
spwanData.push(e);
// console.log(e.toString())
});
node_exec.stderr.on("data", (e) => {
errData.push(e);
// console.log(e.toString())
});
return new Promise((resolve, reject) => {
node_exec.on("close", (n) => {
console.log("node n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
// require('fs').writeFileSync('/mnt/disk2/wechat-web-devtools-linux/tmp/llw2.json', result)
// process.stdout.write(result);
result = JSON.parse(result);
// fs.writeFileSync(
// path.resolve(__dirname, "./3/node_output1.json"),
// JSON.stringify(result, null, 4)
// );
// result = result.generateFunctionContent["__COMMON__"];
// delete result.generateFunctionContent["__COMMON__"];
result = JSON.stringify(result, null, 4)
fs.writeFileSync(
path.resolve(__dirname, "./3/node_output.json"),
result
);
resolve(result);
} else {
process.stderr.write(Buffer.concat(errData).toString());
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
const test = async () => {
try {
const node_result = await test_node();
const wine_result = await test_wine();
console.log("结果是否一致:", wine_result.trim() === node_result);
} catch (err) {
console.error("错误:", err);
}
};
test();

View File

@ -0,0 +1,59 @@
const fs = require("fs");
const path = require("path");
var x = [
"./miniprogram_npm/miniprogram-barrage/index.wxml",
"./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxml",
"./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxml",
"./miniprogram_npm/wxml-to-canvas/index.wxml",
"./page/API/components/set-tab-bar/set-tab-bar.wxml",
"../../../common/head.wxml",
"../../../common/foot.wxml",
"./page/API/index.wxml",
"./page/cloud/index.wxml",
"./page/common/foot.wxml",
"./page/common/head.wxml",
"./page/component/index.wxml",
"./page/extend/index.wxml",
];
const config = {
num: 4,
};
let content = "";
const funcName = "$gwx";
const source = fs
.readFileSync(path.resolve(__dirname, "./3/linux_output.js"))
.toString();
console.log(
path.join(
path.dirname("./page/API/components/set-tab-bar/set-tab-bar.wxml"),
"../../../common/head.wxml"
)
);
// "./page/common/head.wxml"
process.exit(0);
// 引入解析
const deps = source.matchAll(/_ai\(.*?,x\[(\d+)\],.*?,x\[(\d+)\],\d+,\d+\)/g);
console.log(deps);
for (let dep of deps) {
console.log(dep[0]);
console.log(dep[1]);
console.log(dep[2]);
}
// gz函数2
const exp = `function gz\\${funcName}_${
config.num + 1
}\\(\\)\\{[\\s\\S]*?__WXML_GLOBAL__\\.ops_cached\\.\\${funcName}_${
config.num + 1
}\n}`;
// console.log('exp --- ', exp)
const gz = source.match(new RegExp(exp));
// console.log(gz)
content += gz[0].replace(
new RegExp(`\\${funcName}\\_\\d+`, "g"),
`${config.funcName}_1`
);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
x 元素个数13
第6、7 npm 下标5、6
gz1 - gz11
m0 - m10
XC_0 - XC_

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,130 @@
#!/usr/bin/env node
const { spawn, spawnSync } = require("child_process");
const path = require("path");
const fs = require("fs");
const { exit } = require("process");
const projectPath = "/mnt/disk1/WeChatProjects/miniprogram-demo/miniprogram/";
const config = [
"-d",
"--split",
">_<4685",
"-cc",
"9>_<4685./miniprogram_npm/miniprogram-barrage/index.wxml>_<46850>_<4685./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxml>_<46850>_<4685./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxml>_<46850>_<4685./miniprogram_npm/wxml-to-canvas/index.wxml>_<46850>_<4685./page/API/index.wxml>_<46851>_<4685set-tab-bar>_<4685./page/API/components/set-tab-bar/set-tab-bar.wxml>_<46850>_<4685./page/cloud/index.wxml>_<46850>_<4685./page/component/index.wxml>_<46850>_<4685./page/extend/index.wxml>_<46850",
"-llw",
"./miniprogram_npm/miniprogram-barrage/index>_<4685./miniprogram_npm/miniprogram-recycle-view/recycle-item>_<4685./miniprogram_npm/miniprogram-recycle-view/recycle-view>_<4685./miniprogram_npm/wxml-to-canvas/index>_<4685./page/API/index>_<4685./page/API/components/set-tab-bar/set-tab-bar>_<4685./page/cloud/index>_<4685./page/component/index>_<4685./page/extend/index",
"./miniprogram_npm/miniprogram-barrage/index.wxml",
"./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxml",
"./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxml",
"./miniprogram_npm/wxml-to-canvas/index.wxml",
"./page/API/index.wxml",
"./page/API/components/set-tab-bar/set-tab-bar.wxml",
"./page/cloud/index.wxml",
"./page/common/foot.wxml",
"./page/common/head.wxml",
"./page/component/index.wxml",
"./page/extend/index.wxml",
"-gn",
"$gwx",
];
const test_wine = () => {
const wine = spawn(
path.resolve(__dirname, "../../../../package.nw/js/vendor/wcc.exe"),
config,
{
cwd: projectPath,
}
);
const spwanData = [],
errData = [];
wine.stdout.on("data", (e) => {
spwanData.push(e);
});
wine.stderr.on("data", (e) => {
errData.push(e);
});
return new Promise((resolve, reject) => {
wine.on("close", (n) => {
console.log("wine n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
result = JSON.parse(result);
// delete result.generateFunctionContent["__COMMON__"];
result = JSON.stringify(result, null, 4)
// result = result.generateFunctionContent["__COMMON__"];
fs.writeFileSync(
path.resolve(__dirname, "./3/wine_output.json"),
result
);
// process.stdout.write(result);
resolve(result);
} else {
process.stderr.write(
"wine error:",
Buffer.concat(errData).toString()
);
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
const test_node = () => {
const node_exec = spawn(
path.resolve(__dirname, "../../../nodejs/wcc"),
config,
{
cwd: projectPath,
env: {
WX_DEBUG_COMPILER_OUTPUT: path.resolve(__dirname, "./3"),
},
// stdio: 'inherit'
}
);
const spwanData = [],
errData = [];
node_exec.stdout.on("data", (e) => {
spwanData.push(e);
// console.log(e.toString())
});
node_exec.stderr.on("data", (e) => {
errData.push(e);
// console.log(e.toString())
});
return new Promise((resolve, reject) => {
node_exec.on("close", (n) => {
console.log("node n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
// require('fs').writeFileSync('/mnt/disk2/wechat-web-devtools-linux/tmp/llw2.json', result)
// process.stdout.write(result);
result = JSON.parse(result);
// delete result.generateFunctionContent["__COMMON__"];
result = JSON.stringify(result, null, 4)
// result = result.generateFunctionContent["__COMMON__"];
fs.writeFileSync(
path.resolve(__dirname, "./3/node_output.json"),
result
);
resolve(result);
} else {
process.stderr.write(Buffer.concat(errData).toString());
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
const test = async () => {
try {
const node_result = await test_node();
const wine_result = await test_wine();
console.log("结果是否一致:", wine_result.trim() === node_result);
} catch (err) {
console.error("错误:", err);
}
};
test();

View File

@ -0,0 +1,16 @@
const fs = require('fs')
const path = require('path')
var x=['./miniprogram_npm/miniprogram-barrage/index.wxml','./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxml','./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxml','./miniprogram_npm/wxml-to-canvas/index.wxml','./page/API/components/set-tab-bar/set-tab-bar.wxml','../../../common/head.wxml','../../../common/foot.wxml','./page/API/index.wxml','./page/cloud/index.wxml','./page/common/foot.wxml','./page/common/head.wxml','./page/component/index.wxml','./page/extend/index.wxml'];
const config = {
num: 4
}
const source = fs.readFileSync(path.resolve(__dirname, './3/linux_output.js')).toString()
const m0Exp = `var m${config.num}=function\\(e,s,r,gg\\){[\\s\\S]*{f:m${config.num},j:\\[.*?\\],i:\\[.*?\\],ti:\\[(.*?)\\],ic:\\[.*?\\]}`
console.log('exp --- ', m0Exp)
let m0 = source.match(new RegExp(m0Exp))
const compIndex = m0[1].match(/\d+/g)
console.log(compIndex)
for(let index of compIndex)
console.log(x[index])
m0 = m0[0].replace(new RegExp(`m${config.num}`, 'g'), 'm0').replace(new RegExp(`x\\[${config.num}\\]`, 'g'), 'x[0]')

View File

@ -110,16 +110,6 @@ const test_wine = () => {
};
const test_node = () => {
// const node_exec1 = spawnSync(
// path.resolve(__dirname, "../../compiler/nodejs/wcc"),
// config,
// {
// cwd: projectPath,
// // stdio: 'inherit'
// }
// );
// console.log(node_exec1.stdout.toString())
// return
const node_exec = spawn(
path.resolve(__dirname, "../../compiler/nodejs/wcc"),
config,
@ -155,44 +145,13 @@ const test_node = () => {
});
};
// const node_exec = spawn(
// path.resolve(__dirname, "../../compiler/nodejs/wcc"),
// config,
// {
// cwd: projectPath,
// // stdio: 'inherit'
// }
// );
// const spwanData = [],
// errData = [];
// node_exec.stdout.on("data", (e) => {
// spwanData.push(e);
// console.log(e.toString())
// });
// node_exec.stderr.on("data", (e) => {
// errData.push(e);
// console.log(e.toString())
// });
// node_exec.on("close", (n) => {
// console.log("n: ", n);
// if (0 === n) {
// const result = Buffer.concat(spwanData).toString();
// require('fs').writeFileSync(path.resolve(__dirname, '../../tmp/llw2.json'), result)
// // process.stdout.write(result);
// } else {
// process.stderr.write(Buffer.concat(errData).toString());
// // process.stderr.write(Buffer.concat(spwanData).toString());
// }
// });
const test = async () => {
try {
// const wine_result = await test_wine();
const wine_result = await test_wine();
const node_result = await test_node();
console.log(wine_result === node_result)
} catch (err) {
console.error(err);
console.error('错误:', err);
}
};
test();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

127
compiler/test/wcsc/ll3.js Normal file
View File

@ -0,0 +1,127 @@
#!/usr/bin/env node
const { spawn, spawnSync } = require("child_process");
const path = require("path");
const fs = require("fs");
const { exit } = require("process");
const projectPath = "/mnt/disk1/WeChatProjects/miniprogram-demo/miniprogram/";
const config = [
"-db",
"-pc",
"9",
"./page/component/index.wxss",
"./page/API/index.wxss",
"./page/cloud/index.wxss",
"./page/extend/index.wxss",
"./miniprogram_npm/miniprogram-barrage/index.wxss",
"./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxss",
"./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxss",
"./miniprogram_npm/wxml-to-canvas/index.wxss",
"./page/API/components/set-tab-bar/set-tab-bar.wxss",
"./app.wxss",
"./common/lib/weui.wxss",
"./page/common/common.wxss",
"./page/common/index.wxss",
"./page/common/lib/weui.wxss",
];
const test_wine = () => {
const wine = spawn(
path.resolve(__dirname, "../../../package.nw/js/vendor/wcsc.exe"),
config,
{
cwd: projectPath,
}
);
const spwanData = [],
errData = [];
wine.stdout.on("data", (e) => {
spwanData.push(e);
});
wine.stderr.on("data", (e) => {
errData.push(e);
});
return new Promise((resolve, reject) => {
wine.on("close", (n) => {
console.log("wine n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
result = JSON.parse(result);
// delete result.generateFunctionContent["__COMMON__"];
result = JSON.stringify(result, null, 4);
// result = result.generateFunctionContent["__COMMON__"];
fs.writeFileSync(
path.resolve(__dirname, "./3/wine_output.json"),
result
);
// process.stdout.write(result);
resolve(result);
} else {
process.stderr.write(
"wine error:",
Buffer.concat(errData).toString()
);
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
const test_node = () => {
const node_exec = spawn(
path.resolve(__dirname, "../../nodejs/wcsc"),
config,
{
cwd: projectPath,
env: {
WX_DEBUG_COMPILER_OUTPUT: path.resolve(__dirname, "./3"),
},
// stdio: 'inherit'
}
);
const spwanData = [],
errData = [];
node_exec.stdout.on("data", (e) => {
spwanData.push(e);
// console.log(e.toString())
});
node_exec.stderr.on("data", (e) => {
errData.push(e);
// console.log(e.toString())
});
return new Promise((resolve, reject) => {
node_exec.on("close", (n) => {
console.log("node n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
// require('fs').writeFileSync('/mnt/disk2/wechat-web-devtools-linux/tmp/llw2.json', result)
// process.stdout.write(result);
result = JSON.parse(result);
// delete result.generateFunctionContent["__COMMON__"];
result = JSON.stringify(result, null, 4);
// result = result.generateFunctionContent["__COMMON__"];
fs.writeFileSync(
path.resolve(__dirname, "./3/node_output.json"),
result
);
resolve(result);
} else {
process.stderr.write(Buffer.concat(errData).toString());
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
const test = async () => {
try {
const node_result = await test_node();
const wine_result = await test_wine();
console.log("结果是否一致:", wine_result.trim() === node_result);
} catch (err) {
console.error("错误:", err);
}
};
test();