mirror of
https://github.com/msojocs/wechat-web-devtools-linux.git
synced 2025-07-22 00:00:04 +08:00
fix: 可视化wcsc #16
This commit is contained in:
parent
f0d100c761
commit
6dcf602079
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -2,7 +2,6 @@ const util = require('./util')
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const fs = util.fs
|
const fs = util.fs
|
||||||
|
|
||||||
// TODO:未找到触发操作,所以相关功能未验证
|
|
||||||
let wcsc
|
let wcsc
|
||||||
try {
|
try {
|
||||||
wcsc = require('./src/wcsc')
|
wcsc = require('./src/wcsc')
|
||||||
@ -59,20 +58,8 @@ exports = async function (options) {
|
|||||||
let wcscResult
|
let wcscResult
|
||||||
try {
|
try {
|
||||||
console.warn('wcsc options', options)
|
console.warn('wcsc options', options)
|
||||||
wcscResult = wcsc(options.cwd, options.files, options)
|
wcscResult = await wcsc(options)
|
||||||
if(options.lazyload){
|
console.warn('wcsc ok')
|
||||||
const t = wcscResult
|
|
||||||
wcscResult = {
|
|
||||||
common: t.comm,
|
|
||||||
pageWxss: {}
|
|
||||||
}
|
|
||||||
for(let key in t){
|
|
||||||
console.log(key)
|
|
||||||
if(key.endsWith('.wxss')){
|
|
||||||
wcscResult.pageWxss[key] = t[key]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (errmsg) {
|
} catch (errmsg) {
|
||||||
throw new Error(errmsg)
|
throw new Error(errmsg)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
const { spawnSync } = require('child_process')
|
const { spawn, spawnSync } = require('child_process')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
const os = require('os')
|
||||||
|
const { throws } = require('assert')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取 wxss 编译器路径
|
* 获取 wxss 编译器路径
|
||||||
@ -57,35 +59,85 @@ function getAllFiles(rootPath, files) {
|
|||||||
/**
|
/**
|
||||||
* 编译 wxss 到 js
|
* 编译 wxss 到 js
|
||||||
*/
|
*/
|
||||||
function wxssToJS(rootPath, files, options) {
|
async function wxssToJS(options) {
|
||||||
|
// 创建临时目录
|
||||||
|
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'wcsc_'))
|
||||||
|
// 判断是否replace,是写入replace,否则拷贝文件到临时目录
|
||||||
|
for(let file of options.files){
|
||||||
|
if (typeof options.replaceContent[file] === 'string') {
|
||||||
|
// 写入替换内容
|
||||||
|
fs.mkdirSync(path.dirname(path.resolve(tmp, file)), {recursive:true})
|
||||||
|
fs.writeFileSync(path.resolve(tmp, file), options.replaceContent[file])
|
||||||
|
}else{
|
||||||
|
// 复制原文件
|
||||||
|
fs.mkdirSync(path.dirname(path.resolve(tmp, file)), {recursive:true})
|
||||||
|
fs.copyFileSync(path.resolve(options.cwd, file), path.resolve(tmp, file))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 使用临时目录执行wcc
|
||||||
|
options.cwd = tmp
|
||||||
|
|
||||||
|
let rootPath = options.cwd, files=options.files
|
||||||
// files = getAllFiles(rootPath, files)
|
// files = getAllFiles(rootPath, files)
|
||||||
|
|
||||||
const args = ['-db', '-pc', String(options.pageCount)].concat(files)
|
const args = ['-db', '-pc', String(options.pageCount)].concat(files)
|
||||||
|
|
||||||
const wxssParserPath = getWXSSParsePath()
|
const wxssParserPath = getWXSSParsePath()
|
||||||
console.warn('wcsc args: ', args)
|
// console.warn('wcsc args: ', args)
|
||||||
const wcsc = spawnSync(wxssParserPath, args, { cwd: rootPath })
|
// const wcsc = spawnSync(wxssParserPath, args, { cwd: rootPath })
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
|
||||||
if (wcsc.status === 0) {
|
const wcsc = spawn(wxssParserPath, args, {
|
||||||
let res = wcsc.stdout.toString();
|
cwd: rootPath,
|
||||||
res = res.split('=')
|
});
|
||||||
const funcList = {}
|
const spwanData = [],
|
||||||
for (let i = 0, len = res.length; i < len && res[i + 1]; i += 2) {
|
errData = [];
|
||||||
funcList[res[i]] = res[i + 1].replace(
|
wcsc.stdout.on("data", (e) => {
|
||||||
/((\\x[\da-f]{2}|\\u[\da-f]{4})){1,}/gi,
|
spwanData.push(e);
|
||||||
function ($0, $1, $2) {
|
});
|
||||||
return eval('"' + $0 + '"');
|
wcsc.stderr.on("data", (e) => {
|
||||||
|
errData.push(e);
|
||||||
|
});
|
||||||
|
wcsc.on("close", (code) => {
|
||||||
|
console.warn('close', new Date().getTime()/1000)
|
||||||
|
if (code === 0) {
|
||||||
|
let result = Buffer.concat(spwanData).toString();
|
||||||
|
if(options.lazyload){
|
||||||
|
result = result.split('=')
|
||||||
|
let funcList = {}
|
||||||
|
for (let i = 0, len = result.length; i < len && result[i + 1]; i += 2) {
|
||||||
|
funcList[result[i]] = result[i + 1]
|
||||||
|
.replace(
|
||||||
|
/[^\\]((\\x[\da-f]{2}|\\u[\da-f]{4})){1,}/gi,
|
||||||
|
function ($0, $1, $2) {
|
||||||
|
return eval('"' + $0 + '"');
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.replace(/\\[\s\S]{1}/gi, function ($0, $1, $2) {
|
||||||
|
// console.log($0, $1)
|
||||||
|
const c = $0 === "\\n" ? "\n" : $0[1];
|
||||||
|
return c
|
||||||
|
})
|
||||||
}
|
}
|
||||||
).replace(/\\[\s\S]{1}/gi, function ($0, $1, $2) {
|
const t = funcList
|
||||||
// console.log($0, $1)
|
funcList = {
|
||||||
const c = $0 === "\\n" ? "\n" : $0[1];
|
common: t.comm,
|
||||||
return c
|
pageWxss: {}
|
||||||
})
|
}
|
||||||
}
|
for(let key in t){
|
||||||
return funcList
|
if(key.endsWith('.wxss')){
|
||||||
} else {
|
funcList.pageWxss[key] = t[key]
|
||||||
return new Error(`编译 .wxss 文件错误:${wcsc.stderr.toString()}`)
|
}
|
||||||
}
|
}
|
||||||
|
result = funcList
|
||||||
|
}
|
||||||
|
resolve(result)
|
||||||
|
} else {
|
||||||
|
throw new Error(`编译 .wxss 文件错误(${wcsc.status}):${wcsc.stderr.toString()}`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = wxssToJS
|
module.exports = wxssToJS
|
||||||
|
5
test/debug-wcsc
Normal file
5
test/debug-wcsc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
root_dir=$(cd `dirname $0`/.. && pwd -P)
|
||||||
|
|
||||||
|
rm -rf ~/.config/wechat_devtools/WeappCache/requireCache
|
||||||
|
$root_dir/bin/wechat-devtools
|
@ -1,14 +1,17 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
function encode1(s) {
|
let str1 = "window.screen.orientation \\x26\\x26 /^landscape/.tes";
|
||||||
return encodeURI(s).replace(
|
str1 = str1
|
||||||
/%(u[0-9A-F]{4})|(%[0-9A-F]{2})/gm,
|
.replace(
|
||||||
function ($0, $1, $2) {
|
/[^\\]((\\x[\da-f]{2}|\\u[\da-f]{4})){1,}/gi,
|
||||||
return ($1 && "\\" + $1.toLowerCase()) || decodeURI($2);
|
function ($0, $1, $2) {
|
||||||
}
|
console.log($0, eval('"' + $0 + '"'));
|
||||||
);
|
return eval('"' + $0 + '"');
|
||||||
}
|
}
|
||||||
|
)
|
||||||
console.log(encode1('content:\\\\x22\\\\x22'))
|
.replace(/\\[\s\S]{1}/gi, function ($0, $1, $2) {
|
||||||
console.log(encodeURI('\\\\x22\\\\x22'))
|
// console.log($0, $1)
|
||||||
// console.log(JSON.parse())
|
const c = $0 === "\\n" ? "\n" : $0[1];
|
||||||
|
return c;
|
||||||
|
});
|
||||||
|
console.log(str1);
|
||||||
|
1
test/wcsc/viewedit/1/linux_output.js
Normal file
1
test/wcsc/viewedit/1/linux_output.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,25 +0,0 @@
|
|||||||
const wcsc = require('../../../package.nw/node_modules/wcsc')
|
|
||||||
const fs = require('fs')
|
|
||||||
|
|
||||||
const options = {
|
|
||||||
"files": [
|
|
||||||
"./pages/index/index.wxss",
|
|
||||||
"./pages/logs/logs.wxss",
|
|
||||||
"./app.wxss"],
|
|
||||||
"contents": [
|
|
||||||
"/**index.wxss**/\n.userinfo {\n display: flex;\n flex-direction: column;\n align-items: center;\n color: #aaa;\n}\n\n.userinfo-avatar {\n overflow: hidden;\n width: 128rpx;\n height: 128rpx;\n margin: 20rpx;\n border-radius: 50%;\n}\n\n.usermotto {\n margin-top: 200px;\n}", ".log-list {\n display: flex;\n flex-direction: column;\n padding: 40rpx;\n}\n.log-item {\n margin: 10rpx;\n}\n", "/**app.wxss**/\n.container {\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n padding: 200rpx 0;\n box-sizing: border-box;\n} \n"
|
|
||||||
],
|
|
||||||
"pageCount": 2,
|
|
||||||
"cwd": "/home/msojocs/Documents/we1",
|
|
||||||
"replaceContent": {
|
|
||||||
"./pages/index/index.wxss": "/**index.wxss**/\n.userinfo {\n display: flex;\n flex-direction: column;\n align-items: center;\n color: #aaa;\n}\n\n.userinfo-avatar {\n overflow: hidden;\n width: 128rpx;\n height: 128rpx;\n margin: 20rpx;\n border-radius: 50%;\n}\n\n.usermotto {\n margin-top: 200px;\n}"
|
|
||||||
},
|
|
||||||
"debug": true,
|
|
||||||
"classPrefix": "",
|
|
||||||
"lazyload": true
|
|
||||||
}
|
|
||||||
wcsc(options)
|
|
||||||
.then(res=>{
|
|
||||||
console.log(res)
|
|
||||||
fs.writeFileSync('test/wcsc/viewedit/1/node.json', JSON.stringify(res, null, 2))
|
|
||||||
})
|
|
103
test/wcsc/viewedit/wcsc_test.js
Normal file
103
test/wcsc/viewedit/wcsc_test.js
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
const wcsc = require("../../../package.nw/node_modules/wcsc");
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
let options = {
|
||||||
|
files: ["./pages/index/index.wxss", "./pages/logs/logs.wxss", "./app.wxss"],
|
||||||
|
contents: [
|
||||||
|
"/**index.wxss**/\n.userinfo {\n display: flex;\n flex-direction: column;\n align-items: center;\n color: #aaa;\n}\n\n.userinfo-avatar {\n overflow: hidden;\n width: 128rpx;\n height: 128rpx;\n margin: 20rpx;\n border-radius: 50%;\n}\n\n.usermotto {\n margin-top: 200px;\n}",
|
||||||
|
".log-list {\n display: flex;\n flex-direction: column;\n padding: 40rpx;\n}\n.log-item {\n margin: 10rpx;\n}\n",
|
||||||
|
"/**app.wxss**/\n.container {\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n padding: 200rpx 0;\n box-sizing: border-box;\n} \n",
|
||||||
|
],
|
||||||
|
pageCount: 2,
|
||||||
|
cwd: "/home/msojocs/Documents/we1",
|
||||||
|
replaceContent: {
|
||||||
|
"./pages/index/index.wxss":
|
||||||
|
"/**index.wxss**/\n.userinfo {\n display: flex;\n flex-direction: column;\n align-items: center;\n color: #aaa;\n}\n\n.userinfo-avatar {\n overflow: hidden;\n width: 128rpx;\n height: 128rpx;\n margin: 20rpx;\n border-radius: 50%;\n}\n\n.usermotto {\n margin-top: 200px;\n}",
|
||||||
|
},
|
||||||
|
debug: true,
|
||||||
|
classPrefix: "",
|
||||||
|
lazyload: false,
|
||||||
|
};
|
||||||
|
options = {
|
||||||
|
pageCount: 54,
|
||||||
|
files: [
|
||||||
|
"./pages/login/login.wxss",
|
||||||
|
"./pages/index/index.wxss",
|
||||||
|
"./pages/articleView/articleView.wxss",
|
||||||
|
"./pages/calendar/calendar.wxss",
|
||||||
|
"./pages/card/card.wxss",
|
||||||
|
"./pages/checkIn/edit.wxss",
|
||||||
|
"./pages/checkIn/list.wxss",
|
||||||
|
"./pages/courseTable/courseTable.wxss",
|
||||||
|
"./pages/courseTable/imgCropper/imgCropper.wxss",
|
||||||
|
"./pages/exam/exam.wxss",
|
||||||
|
"./pages/grade/grade.wxss",
|
||||||
|
"./pages/laboratory/list.wxss",
|
||||||
|
"./pages/laboratory/detail.wxss",
|
||||||
|
"./pages/maintenance/maintenance.wxss",
|
||||||
|
"./pages/my/ADMag/ADMag.wxss",
|
||||||
|
"./pages/my/ADMag/watchAD/watchAD.wxss",
|
||||||
|
"./pages/my/dataMag/dataMag.wxss",
|
||||||
|
"./pages/my/my.wxss",
|
||||||
|
"./pages/my/sub/sub.wxss",
|
||||||
|
"./pages/my/sso/sso.wxss",
|
||||||
|
"./pages/newsList/newsList.wxss",
|
||||||
|
"./pages/officeGrade/query.wxss",
|
||||||
|
"./pages/THEOL/dir/dir.wxss",
|
||||||
|
"./pages/THEOL/THEOL.wxss",
|
||||||
|
"./pages/THEOL/tree/tree.wxss",
|
||||||
|
"./pages/auth/auth.wxss",
|
||||||
|
"./pages/my/bind/bind.wxss",
|
||||||
|
"./pages/my/register/register.wxss",
|
||||||
|
"./pages/my/bind/mini.wxss",
|
||||||
|
"./pages/terms/privacy.wxss",
|
||||||
|
"./pages/resources/list.wxss",
|
||||||
|
"./pages/my/about.wxss",
|
||||||
|
"./components/card.wxss",
|
||||||
|
"./components/beat-char/beat-char.wxss",
|
||||||
|
"./components/mytree/mytree.wxss",
|
||||||
|
"./components/scroll/index.wxss",
|
||||||
|
"./components/tab/index.wxss",
|
||||||
|
"./miniprogram_npm/weui-miniprogram/cell/cell.wxss",
|
||||||
|
"./miniprogram_npm/weui-miniprogram/cells/cells.wxss",
|
||||||
|
"./miniprogram_npm/weui-miniprogram/loading/loading.wxss",
|
||||||
|
"./node-modules/mp-html/dist/uni-app/components/mp-html/mp-html.wxss",
|
||||||
|
"./node-modules/mp-html/dist/uni-app/components/mp-html/node/node.wxss",
|
||||||
|
"./pages/my/info.wxss",
|
||||||
|
"./uni_modules/uni-card/components/uni-card/uni-card.wxss",
|
||||||
|
"./uni_modules/uni-icons/components/uni-icons/uni-icons.wxss",
|
||||||
|
"./uni_modules/uni-row/components/uni-col/uni-col.wxss",
|
||||||
|
"./uni_modules/uni-row/components/uni-row/uni-row.wxss",
|
||||||
|
"./uni_modules/uni-title/components/uni-title/uni-title.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/index.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/components/timePicker/timePicker.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/vant/icon/index.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/vant/info/index.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/vant/uploader/index.wxss",
|
||||||
|
"./wxcomponents/image-cropper/image-cropper.wxss",
|
||||||
|
"./app.wxss",
|
||||||
|
"./common/main.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/index-wxa-auto-dark.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/components/timePicker/timePicker-wxa-auto-dark.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/vant/common/index-wxa-auto-dark.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/vant/common/index.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/vant/icon/index-wxa-auto-dark.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/vant/info/index-wxa-auto-dark.wxss",
|
||||||
|
"./wxcomponents/dynamicForm/vant/uploader/index-wxa-auto-dark.wxss",
|
||||||
|
],
|
||||||
|
cwd: "/mnt/disk1/Project/WeCuit-Project/WeCuit-Mini-uni-test_uni_vue-cli/dist/build/mp-weixin",
|
||||||
|
lazyload: true,
|
||||||
|
replaceContent: {
|
||||||
|
"./pages/login/login.wxss":
|
||||||
|
".login-page.data-v-53bada72{display:flex;flex-direction:column;justify-content:flex-end;height:100vh}.logo-area.data-v-53bada72{display:flex;justify-content:center;height:80%}.logo.data-v-53bada72{display:flex;align-items:center}.logo-item.data-v-53bada72{height:200rpx;width:200rpx;border-radius:calc(50%)}.login-area.data-v-53bada72{display:flex;justify-content:center;align-items:center;margin:50rpx}.loading.data-v-53bada72{margin-top:5rpx;margin-right:10rpx;transform-origin:center center;-webkit-animation:rotate-data-v-53bada72 1s linear infinite;animation:rotate-data-v-53bada72 1s linear infinite}@-webkit-keyframes rotate-data-v-53bada72{0%{transform:rotate(0)}50%{transform:rotate(180deg)}100%{transform:rotate(1turn)}}@keyframes rotate-data-v-53bada72{0%{transform:rotate(0)}50%{transform:rotate(180deg)}100%{transform:rotate(1turn)}}",
|
||||||
|
},
|
||||||
|
|
||||||
|
debug: true,
|
||||||
|
};
|
||||||
|
wcsc(options).then((res) => {
|
||||||
|
// console.log(res);
|
||||||
|
fs.writeFileSync(
|
||||||
|
"test/wcsc/viewedit/1/node.json",
|
||||||
|
JSON.stringify(res, null, 2)
|
||||||
|
);
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user