mirror of
https://github.com/msojocs/wechat-web-devtools-linux.git
synced 2025-07-22 00:00:04 +08:00
parent
05d5494835
commit
22b579ec5e
@ -37,6 +37,7 @@ clean_cache() {
|
|||||||
echo "清理缓存";
|
echo "清理缓存";
|
||||||
rm -rf "$APPDATA/WeappCache";
|
rm -rf "$APPDATA/WeappCache";
|
||||||
rm -rf "$APPDATA/WeappVendor";
|
rm -rf "$APPDATA/WeappVendor";
|
||||||
|
rm -rf "$DATA_DIR/wechat_devtools"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 检测是否有清除缓存的必要
|
# 检测是否有清除缓存的必要
|
||||||
|
4
compiler/wcc_node/lib/index.js
Normal file
4
compiler/wcc_node/lib/index.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
module.exports = {
|
||||||
|
wcc: require('./wcc'),
|
||||||
|
wcsc: require('./wcsc')
|
||||||
|
}
|
95
compiler/wcc_node/lib/wcc.js
Normal file
95
compiler/wcc_node/lib/wcc.js
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
const util = require('./util')
|
||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
let wcc
|
||||||
|
|
||||||
|
function loadWccAddon() {
|
||||||
|
if (wcc) return
|
||||||
|
// wcc = require('../build/Release/wcc.node')
|
||||||
|
wcc = require('../src/wcc')
|
||||||
|
}
|
||||||
|
|
||||||
|
const fs = util.fs
|
||||||
|
|
||||||
|
exports = async function (options) {
|
||||||
|
|
||||||
|
loadWccAddon()
|
||||||
|
|
||||||
|
if (!options) throw Error('options is required')
|
||||||
|
|
||||||
|
const lazyload = !!options.lazyloadConfig
|
||||||
|
|
||||||
|
options = Object.assign(
|
||||||
|
{
|
||||||
|
files: [],
|
||||||
|
contents: [],
|
||||||
|
replaceContent: {},
|
||||||
|
verbose: false,
|
||||||
|
debug: false,
|
||||||
|
debugWXS: false,
|
||||||
|
showNewTree: false,
|
||||||
|
isPlugin: false,
|
||||||
|
addTestAttre: false,
|
||||||
|
independent: false,
|
||||||
|
genfuncname: '$gwx',
|
||||||
|
isCut: false,
|
||||||
|
cwd: process.cwd,
|
||||||
|
debug: false,
|
||||||
|
lazyload,
|
||||||
|
lazyloadConfig: '',
|
||||||
|
},
|
||||||
|
options,
|
||||||
|
)
|
||||||
|
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
let st = Date.now()
|
||||||
|
|
||||||
|
// 获取文件内容
|
||||||
|
if (!options.contents.length) {
|
||||||
|
const tasks = options.files.map((file) => {
|
||||||
|
if (typeof options.replaceContent[file] === 'string') {
|
||||||
|
return options.replaceContent[file]
|
||||||
|
}
|
||||||
|
return fs.readFile(path.resolve(options.cwd, file), 'utf8')
|
||||||
|
})
|
||||||
|
options.contents = await Promise.all(tasks) || []
|
||||||
|
}
|
||||||
|
// console.log('wcc get files', Date.now() - st, options.contents)
|
||||||
|
let result
|
||||||
|
try {
|
||||||
|
result = wcc(options)
|
||||||
|
} catch(errmsg) {
|
||||||
|
reject(new Error(errmsg))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('wcc get compile', Date.now() - st)
|
||||||
|
if (options.output) {
|
||||||
|
const output = path.resolve(options.cwd, options.output)
|
||||||
|
const dir = path.dirname(output)
|
||||||
|
if (lazyload) {
|
||||||
|
// lazyload 为 true时,wcc 返回值是个对象, 需要序列化一下
|
||||||
|
result = JSON.stringify(result)
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await fs.stat(dir)
|
||||||
|
} catch (e) {
|
||||||
|
await fs.mkdir(dir, {
|
||||||
|
recursive: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
await fs.writeFile(output, result, 'utf8')
|
||||||
|
}
|
||||||
|
console.log('wcc get output', Date.now() - st)
|
||||||
|
resolve(result)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.defineProperty(exports, 'version', {
|
||||||
|
get() {
|
||||||
|
loadWccAddon()
|
||||||
|
return wcc.version
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
module.exports = exports
|
93
compiler/wcc_node/lib/wcsc.js
Normal file
93
compiler/wcc_node/lib/wcsc.js
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
const util = require('./util')
|
||||||
|
const path = require('path')
|
||||||
|
const fs = util.fs
|
||||||
|
|
||||||
|
let wcsc
|
||||||
|
|
||||||
|
function loadWcscAddon() {
|
||||||
|
if (wcsc) return
|
||||||
|
// wcsc = require('../build/Release/wcsc.node')
|
||||||
|
wcsc = require('../src/wcsc')
|
||||||
|
}
|
||||||
|
|
||||||
|
function tranWcscResultToObject(resultStr) {
|
||||||
|
const resultArr = resultStr.split('=')
|
||||||
|
const result = {}
|
||||||
|
for (let i = 0, len = resultArr.length; i < len && resultArr[i + 1]; i += 2) {
|
||||||
|
result[resultArr[i]] = resultArr[i + 1]
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
exports = async function (options) {
|
||||||
|
|
||||||
|
loadWcscAddon()
|
||||||
|
|
||||||
|
if (!options) throw Error('options is required')
|
||||||
|
|
||||||
|
// avoid undefined or null
|
||||||
|
if (typeof options.subPackage !== 'string') {
|
||||||
|
delete options.subPackage
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof options.lazyload !== 'boolean') {
|
||||||
|
delete options.lazyload
|
||||||
|
}
|
||||||
|
|
||||||
|
options = Object.assign(
|
||||||
|
{
|
||||||
|
files: [],
|
||||||
|
contents: [],
|
||||||
|
pageCount: 0,
|
||||||
|
cwd: process.cwd,
|
||||||
|
replaceContent: {},
|
||||||
|
debug: false,
|
||||||
|
classPrefix: '',
|
||||||
|
lazyload: false,
|
||||||
|
},
|
||||||
|
options,
|
||||||
|
)
|
||||||
|
|
||||||
|
if (!options.contents.length) {
|
||||||
|
const tasks = options.files.map((file) => {
|
||||||
|
if (typeof options.replaceContent[file] === 'string') {
|
||||||
|
return options.replaceContent[file]
|
||||||
|
}
|
||||||
|
return fs.readFile(path.resolve(options.cwd, file), 'utf8')
|
||||||
|
})
|
||||||
|
options.contents = await Promise.all(tasks) || []
|
||||||
|
}
|
||||||
|
|
||||||
|
let wccResult
|
||||||
|
try {
|
||||||
|
wccResult = wcsc(options)
|
||||||
|
} catch (errmsg) {
|
||||||
|
throw new Error(errmsg)
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = options.lazyload ? wccResult : tranWcscResultToObject(wccResult)
|
||||||
|
|
||||||
|
if (options.output) {
|
||||||
|
const output = path.resolve(options.cwd, options.output)
|
||||||
|
const dir = path.dirname(output)
|
||||||
|
try {
|
||||||
|
await fs.stat(dir)
|
||||||
|
} catch (e) {
|
||||||
|
await fs.mkdir(dir, {
|
||||||
|
recursive: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
await fs.writeFile(output, JSON.stringify(result, null, 2), 'utf8')
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.defineProperty(exports, 'version', {
|
||||||
|
get() {
|
||||||
|
loadWcscAddon()
|
||||||
|
return wcsc.version
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
module.exports = exports
|
@ -2,24 +2,15 @@
|
|||||||
"name": "miniprogram-wcc",
|
"name": "miniprogram-wcc",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"description": "WCC node C++ addon",
|
"description": "WCC node C++ addon",
|
||||||
"main": "index.js",
|
"main": "lib/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"install": "node-gyp-build",
|
"test": "node ./test/wcc/index && node ./test/wcsc/index",
|
||||||
"rebuild": "node-gyp rebuild",
|
|
||||||
"build:dist": "node scripts/build",
|
|
||||||
"build": "node-gyp build",
|
|
||||||
"test": "node ./test/index",
|
|
||||||
"format": "prettier *.js test/*.js scripts/*.js --write"
|
"format": "prettier *.js test/*.js scripts/*.js --write"
|
||||||
},
|
},
|
||||||
"author": "coverguo",
|
"author": "coverguo",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
|
||||||
"node-gyp-build": "^4.2.1"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eustia-module": "^1.21.2",
|
|
||||||
"licia": "^1.21.2",
|
"licia": "^1.21.2",
|
||||||
"ncp": "^2.0.0",
|
|
||||||
"node-gyp": "^7.0.0"
|
"node-gyp": "^7.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
25
compiler/wcc_node_old/package.json
Normal file
25
compiler/wcc_node_old/package.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "miniprogram-wcc",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "WCC node C++ addon",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"install": "node-gyp-build",
|
||||||
|
"rebuild": "node-gyp rebuild",
|
||||||
|
"build:dist": "node scripts/build",
|
||||||
|
"build": "node-gyp build",
|
||||||
|
"test": "node ./test/index",
|
||||||
|
"format": "prettier *.js test/*.js scripts/*.js --write"
|
||||||
|
},
|
||||||
|
"author": "coverguo",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"node-gyp-build": "^4.2.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"eustia-module": "^1.21.2",
|
||||||
|
"licia": "^1.21.2",
|
||||||
|
"ncp": "^2.0.0",
|
||||||
|
"node-gyp": "^7.0.0"
|
||||||
|
}
|
||||||
|
}
|
438
compiler/wcc_node_old/src/wcc.js
Normal file
438
compiler/wcc_node_old/src/wcc.js
Normal file
File diff suppressed because one or more lines are too long
143
compiler/wcsc_node_old/src/wcsc.js
Normal file
143
compiler/wcsc_node_old/src/wcsc.js
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
const { spawn, spawnSync } = require('child_process')
|
||||||
|
const fs = require('fs')
|
||||||
|
const path = require('path')
|
||||||
|
const os = require('os')
|
||||||
|
const { throws } = require('assert')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 wxss 编译器路径
|
||||||
|
*/
|
||||||
|
let wxssParserPath = ''
|
||||||
|
function getWXSSParsePath() {
|
||||||
|
if (wxssParserPath) return wxssParserPath
|
||||||
|
|
||||||
|
const fileName = process.platform === 'darwin' ? '../bin/mac/wcsc' : process.platform === 'linux' ? '../bin/linux/wcsc' : '../bin/windows/wcsc.exe'
|
||||||
|
wxssParserPath = path.join(__dirname, fileName)
|
||||||
|
|
||||||
|
// 尝试修改权限
|
||||||
|
try {
|
||||||
|
fs.chmodSync(wxssParserPath, 0o777)
|
||||||
|
} catch (err) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
return wxssParserPath
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取完整文件列表
|
||||||
|
*/
|
||||||
|
function getAllFiles(rootPath, files) {
|
||||||
|
const ret = []
|
||||||
|
let compWxssNum = 0
|
||||||
|
|
||||||
|
for (let i = 0, len = files.length; i < len; i++) {
|
||||||
|
const file = files[i]
|
||||||
|
|
||||||
|
let fileJson = null
|
||||||
|
try {
|
||||||
|
fileJson = require(path.join(rootPath, `${file}.json`))
|
||||||
|
} catch(err) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileJson) {
|
||||||
|
// 组件 wxss
|
||||||
|
compWxssNum++
|
||||||
|
ret.unshift(`${file}.wxss`)
|
||||||
|
} else {
|
||||||
|
ret.push(`${file}.wxss`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
list: ret,
|
||||||
|
compWxssNum,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编译 wxss 到 js
|
||||||
|
*/
|
||||||
|
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)
|
||||||
|
|
||||||
|
const args = ['-db', '-pc', String(options.pageCount)].concat(files)
|
||||||
|
options.subPackage && (args.push("--subpackage"), args.push(options.subPackage.replace(/\/$/, "")));
|
||||||
|
const wxssParserPath = getWXSSParsePath()
|
||||||
|
// console.warn('wcsc args: ', args)
|
||||||
|
// const wcsc = spawnSync(wxssParserPath, args, { cwd: rootPath })
|
||||||
|
return new Promise((resolve, reject)=>{
|
||||||
|
|
||||||
|
const wcsc = spawn(wxssParserPath, args, {
|
||||||
|
cwd: rootPath,
|
||||||
|
});
|
||||||
|
const spwanData = [],
|
||||||
|
errData = [];
|
||||||
|
wcsc.stdout.on("data", (e) => {
|
||||||
|
spwanData.push(e);
|
||||||
|
});
|
||||||
|
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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const t = funcList
|
||||||
|
funcList = {
|
||||||
|
common: t.comm,
|
||||||
|
pageWxss: {}
|
||||||
|
}
|
||||||
|
for(let key in t){
|
||||||
|
if(key.endsWith('.wxss')){
|
||||||
|
funcList.pageWxss[key] = t[key]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = funcList
|
||||||
|
}
|
||||||
|
resolve(result)
|
||||||
|
} else {
|
||||||
|
throw new Error(`编译 .wxss 文件错误(${wcsc.status}):${wcsc.stderr.toString()}`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = wxssToJS
|
1134
compiler/wcsc_node_old/util.js
Normal file
1134
compiler/wcsc_node_old/util.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -22,12 +22,11 @@ cd $tmp_dir && npm install miniprogram-compiler
|
|||||||
# 可视化编译
|
# 可视化编译
|
||||||
(cd "${package_dir}/node_modules/" \
|
(cd "${package_dir}/node_modules/" \
|
||||||
&& rm -rf wcc wcsc \
|
&& rm -rf wcc wcsc \
|
||||||
&& mkdir -p "wcc/bin/linux" "wcsc/bin/linux" \
|
&& mkdir -p "wcc/bin/linux" \
|
||||||
&& cp -r "${tmp_dir}/node_modules/miniprogram-compiler/bin/linux/wcc" "wcc/bin/linux/wcc" \
|
&& cp -r "${tmp_dir}/node_modules/miniprogram-compiler/bin/linux/wcc" "wcc/bin/linux/wcc" \
|
||||||
&& cp -r "${tmp_dir}/node_modules/miniprogram-compiler/bin/linux/wcsc" "wcsc/bin/linux/wcsc" \
|
&& cp -r "${tmp_dir}/node_modules/miniprogram-compiler/bin/linux/wcsc" "wcc/bin/linux/wcsc" \
|
||||||
&& chmod 0755 "wcc/bin/linux/wcc" "wcsc/bin/linux/wcsc" \
|
&& chmod 0755 "wcc/bin/linux/wcc" "wcc/bin/linux/wcsc" \
|
||||||
&& cp -r "${srcdir}/compiler/wcc_node"/* "wcc" \
|
&& cp -r "${srcdir}/compiler/wcc_node"/* "wcc"
|
||||||
&& cp -r "${srcdir}/compiler/wcsc_node"/* "wcsc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# 预览编译,设置NO_WINE=true环境变量生效
|
# 预览编译,设置NO_WINE=true环境变量生效
|
||||||
|
Loading…
x
Reference in New Issue
Block a user