其实小程序都是ecmascript写的,了解一下运行机制,改写一下ast即可。
例如:静态扫描,静态分析,都是大概分析出结果。
何为ast
示例代码:
var a = 1;
ast分析网站:
https://astexplorer.net/
{
"type": "File",
"start": 0,
"end": 10,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 10
}
},
"errors": [],
"program": {
"type": "Program",
"start": 0,
"end": 10,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 10
}
},
"sourceType": "module",
"interpreter": null,
"body": [
{
"type": "VariableDeclaration",
"start": 0,
"end": 10,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 10
}
},
"declarations": [
{
"type": "VariableDeclarator",
"start": 4,
"end": 9,
"loc": {
"start": {
"line": 1,
"column": 4
},
"end": {
"line": 1,
"column": 9
}
},
"id": {
"type": "Identifier",
"start": 4,
"end": 5,
"loc": {
"start": {
"line": 1,
"column": 4
},
"end": {
"line": 1,
"column": 5
},
"identifierName": "a"
},
"name": "a"
},
"init": {
"type": "NumericLiteral",
"start": 8,
"end": 9,
"loc": {
"start": {
"line": 1,
"column": 8
},
"end": {
"line": 1,
"column": 9
}
},
"extra": {
"rawValue": 1,
"raw": "1"
},
"value": 1
}
}
],
"kind": "var"
}
],
"directives": []
},
"comments": []
}
即可分析出相关运行结构
改写ast工具
est家族
const esprima = require("esprima");
const estraverse = require("estraverse");
const escodegen = require("escodegen");
const escope = require('escope');acorn
const acorn = require("acorn");recast解析器,可另选择ast
const recast = require("recast");babel-parser babel家族
const babel = require('@babel/parser');
const babeltraverse = require('@babel/traverse').default;
const t = require('@babel/types');
const generate = require('@babel/generator').default;
const template = require('@babel/template').default;