perf: node modules

This commit is contained in:
msojocs 2022-09-07 14:38:55 +08:00
parent 26035ed77c
commit e0b3276eb3
16 changed files with 1448 additions and 30 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
node_modules
test/**/*.json
test/**/*-output.json
test/**/*-output.js
nwjs

5
package-lock.json generated
View File

@ -1,9 +1,12 @@
{
"name": "compiler",
"name": "wx_compiler",
"version": "1.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "wx_compiler",
"version": "1.0",
"dependencies": {
"miniprogram-compiler": "^0.2.1"
},

View File

@ -1,6 +1,18 @@
{
"forceVendor": true,
"name": "wx_compiler",
"main": "test/node-modules/index.html",
"productName": "wx_compiler",
"appname": "wx_compiler",
"version": "1.0",
"chromium-args": "--mixed-context",
"window": {
"frame": true
},
"scripts": {
"test": "mocha --reporter-option maxDiffSize=1e9"
"test": "mocha --reporter-option maxDiffSize=1e9",
"start": "nw ./test/node-modules"
},
"dependencies": {
"miniprogram-compiler": "^0.2.1"

View File

@ -1,2 +0,0 @@
data
*.txt

View File

@ -0,0 +1,14 @@
{
"files": ["./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"],
"debugWXS": false,
"debug": true,
"genfuncname": "$gwx",
"isCut": true,
"wxmlCompileConfig": "9>_<1027./miniprogram_npm/miniprogram-barrage/index.wxml>_<10270>_<1027./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxml>_<10270>_<1027./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxml>_<10270>_<1027./miniprogram_npm/wxml-to-canvas/index.wxml>_<10270>_<1027./page/API/index.wxml>_<10271>_<1027set-tab-bar>_<1027./page/API/components/set-tab-bar/set-tab-bar.wxml>_<10270>_<1027./page/cloud/index.wxml>_<10270>_<1027./page/component/index.wxml>_<10270>_<1027./page/extend/index.wxml>_<10270",
"wxmlCompileConfigSplit": ">_<1027",
"replaceContent": {
"./packageComponent/pages/camera-scan-code/camera-scan-code.wxml": "<import data-ib-structured-id=\"0\" src=\"../../../common/head.wxml\" />\n<import data-ib-structured-id=\"1\" src=\"../../../common/foot.wxml\" />\n\n<view class=\"container page\" data-weui-theme=\"{{theme}}\" data-ib-structured-id=\"2\">\n <template data-ib-structured-id=\"3\" is=\"head\" data=\"{{title: 'camera'}}\"/>\n\n <view class=\"page-body\" data-ib-structured-id=\"4\">\n <view class=\"page-body-wrapper\" data-ib-structured-id=\"5\">\n <camera\n mode=\"scanCode\"\n flash=\"off\"\n bindscancode=\"scanCode\"\n binderror=\"error\"\n data-ib-structured-id=\"6\">\n </camera>\n <view class=\"btn-area\" data-ib-structured-id=\"7\">\n <button type=\"primary\" bindtap=\"navigateBack\" data-ib-structured-id=\"8\">\n 返回正常模式\n </button>\n </view>\n <form data-ib-structured-id=\"9\">\n <view class=\"page-section\" data-ib-structured-id=\"10\">\n <view class=\"weui-cells weui-cells_after-title\" data-ib-structured-id=\"11\">\n <view class=\"weui-cell weui-cell_input\" data-ib-structured-id=\"12\">\n <view class=\"weui-cell__hd\" data-ib-structured-id=\"13\">\n <view class=\"weui-label\" data-ib-structured-id=\"14\">类型</view>\n </view>\n <view class=\"weui-cell__bd\" data-ib-structured-id=\"15\">\n {{ result.type }}\n </view>\n </view>\n <view class=\"weui-cell weui-cell_input\" data-ib-structured-id=\"16\">\n <view class=\"weui-cell__hd\" data-ib-structured-id=\"17\">\n <view class=\"weui-label\" data-ib-structured-id=\"18\">结果</view>\n </view>\n <view class=\"weui-cell__bd\" data-ib-structured-id=\"19\">\n {{ result.result }}\n </view>\n </view>\n </view>\n </view>\n </form>\n </view>\n </view>\n\n <template data-ib-structured-id=\"20\" is=\"foot\" />\n</view>\n"
},
"cwd": "/mnt/disk1/WeChatProjects/miniprogram-demo/miniprogram/",
"lazyloadConfig": ""
}

View File

@ -5,9 +5,12 @@
</head>
<body>
<button onclick="location.reload();">刷新</button>
<pre id="result">
</pre>
<!-- <script src="index.js" ></script> -->
<script>
require('./wcc_test')
require('./wcsc_test')
require('./index')
</script>
</body>
</html>

View File

@ -1,3 +1,36 @@
#!/usr/bin/env node
require('./wcc_test')
require('./wcsc_test')
const fs = require('fs')
const path = require('path')
console.log("---index.js----")
const WCC = require('./wcc_test')
// const WCSC = require('./wcsc_test')
const scanFiles = function(dir) {
var results = []
var list = fs.readdirSync(dir)
list.forEach(function(file) {
// 排除static静态目录可按你需求进行新增
// if (file === 'config.json') {
// return false
// }
const filePath = dir + '/' + file
var stat = fs.statSync(filePath)
if (stat && stat.isDirectory()) {
results = results.concat(scanFiles(filePath))
} else {
// 过滤后缀名(可按你需求进行新增)
// if (path.extname(filePath) === '.json') {
// results.push(path.resolve(__dirname, filePath))
// }
if (file === 'config.json') {
results.push(path.resolve(__dirname, filePath))
}
}
})
return results
}
const init = ()=>{
console.log(__dirname)
const files = scanFiles(__dirname)
console.log(files)
}
init()

View File

@ -1,16 +0,0 @@
{
"forceVendor": true,
"name": "nw_test",
"main": "index.html",
"productName": "test",
"appname": "nw_test",
"version": "1.0",
"window": {
"frame": true
},
"chromium-args": "--no-sandbox --ignore-gpu-blacklist --register-pepper-plugins=./node_modules/mpv.js/build/Release/mpvjs.node;application/x-mpvjs",
"dependencies": {
"mpv.js": "^0.3.0",
"spdlog": "^0.13.6"
}
}

View File

@ -174,8 +174,37 @@ const test = async (options, id) => {
fs.writeFileSync(path.resolve(__dirname, `${id}/wcc_node_${MODE}.txt`), result)
};
(async () => {
for(let options of wcc_options){
await test(options[0], options[1]);
}
})()
// (async () => {
// for(let options of wcc_options){
// await test(options[0], options[1]);
// }
// })();
const scanFiles = function(dir) {
var results = []
var list = fs.readdirSync(dir)
list.forEach(function(file) {
// 排除static静态目录可按你需求进行新增
// if (file === 'static') {
// return false
// }
file = dir + '/' + file
var stat = fs.statSync(file)
if (stat && stat.isDirectory()) {
results = results.concat(scanFiles(file))
} else {
// 过滤后缀名(可按你需求进行新增)
console.log('path:', path)
if (path.extname(file) === '.json') {
results.push(path.resolve(__dirname, file))
}
}
})
return results
}
const init = ()=>{
const files = scanFiles(__dirname)
console.log(files)
}
module.exports = {
init
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,4 @@
module.exports = {
wcc: require('./wcc'),
wcsc: require('./wcsc')
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,94 @@
const util = require('./util')
const path = require('path')
let wcc
function loadWccAddon() {
if (wcc) return
wcc = require('../build/Release/wcc.node')
}
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

View File

@ -0,0 +1,92 @@
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')
}
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

View File

@ -0,0 +1,18 @@
{
"name": "miniprogram-wcc",
"version": "0.0.1",
"description": "WCC node C++ addon",
"main": "lib/index.js",
"scripts": {
"rebuild": "node-gyp rebuild",
"build": "node-gyp build",
"test": "node ./test/wcc/index && node ./test/wcsc/index",
"format": "prettier *.js test/*.js scripts/*.js --write"
},
"author": "coverguo",
"license": "MIT",
"devDependencies": {
"licia": "^1.21.2",
"node-gyp": "^7.0.0"
}
}