当前位置: 首页 > news >正文

飘云网络科技有限公司aso优化服务

飘云网络科技有限公司,aso优化服务,什么网站没人做,看电视免费直播频道这边遇到一个类似于测试的需求,需要从一个js文件里获取函数名,然后尝试执行这些函数和创建实例。这边首先遇到了一个问题是如何动态获取js里的函数名和类名,我这边暂时没找到特别好的方法,已有的方法都是类似于提取语法树那种提取…

这边遇到一个类似于测试的需求,需要从一个js文件里获取函数名,然后尝试执行这些函数和创建实例。这边首先遇到了一个问题是如何动态获取js里的函数名和类名,我这边暂时没找到特别好的方法,已有的方法都是类似于提取语法树那种提取函数名
最后想的还是通过正则匹配函数名来尝试执行,有参数需求的函数尝试用数字代替作为参数尽量执行,加了个5秒超时

附:安装npm
https://nodejs.org/en

安装minimist(用于调用参数)

npm i minimist

调用

node tester.js --fp sample.js

代码:

const fs = require('fs');
const path = require('path');console.log("--fp指定路径");
var args = require('minimist')(process.argv.slice(2));
console.log("filepath:",args.fp);
// 目标文件路径
const targetPath = path.join(__dirname, args.fp);// 读取index.js文件内容
const fileContent = fs.readFileSync(targetPath, 'utf8');// 正则表达式匹配函数名和类名
const functionRegex = /function\s+(\w+)\s*\(/g;
const classRegex = /class\s+(\w+)/g;
const arrowFunctionRegex =  /([a-zA-Z_\$][a-zA-Z_\$0-9]*)\s*=\s*\([^)]*\)\s*=>/g;
// const arrowFunctionRegex = /^([^\(\)]+)\s*=>/;const functions = [];
const classes = [];// 匹配函数名
let match;
while ((match = functionRegex.exec(fileContent)) !== null) {functions.push(match[1]);
}
while ((match = arrowFunctionRegex.exec(fileContent)) !== null) {functions.push(match[1]);
}// 匹配类名
while ((match = classRegex.exec(fileContent)) !== null) {classes.push(match[1]);
}if (!fileContent.includes('module.exports')) {fs.writeFileSync(targetPath,fileContent +`\nmodule.exports = {${functions.join(',') + ',' + classes.join(',')}}`);
}const newRequire = require(targetPath);/**
*@name asyncFunction
*@des 异步函数
*@param use: () => void | unknow
*@return {Promise}*/const  asyncFunction = async(use) => {return new Promise( (resolve, reject) => {// 异步操作,例如 Ajax 请求或者定时器try {const result = use();if(result) resolve(result)} catch (error) {reject(error)}});
}// -- timeout 机制
function withTimeout(promise, timeout) {return Promise.race([promise,new Promise((resolve, reject) => {setTimeout(() => {reject(new Error('操作超时'));}, timeout);})]);
}// 处理类的方法
const onHandleClassFn = async (ClassName, target, name) => {const params = [];for (let i = 0; i < target.length; i++) {params.push('拟参' + i);}if (!/^class\s/.test(Function.prototype.toString.call(target))) {try {const result = await withTimeout(asyncFunction(() => {return target.length? target(...params): target()}),5000);console.log(`---------类${ClassName}${name}()的return结果:`, result);} catch (error) {console.log(`+++++++++抛出错误类${ClassName}${name}()函数执行出错,error信息:`, error);} }
};
for (const iterator in newRequire) {const target = newRequire[iterator];const params = [];for (let i = 0; i < target.length; i++) {params.push('拟参' + i);}if (!/^class\s/.test(Function.prototype.toString.call(target))) {try {target.length? console.log(`---------以上是${iterator}()执行的log,return:`,target(...params),'---------'): console.log(`---------以上是${iterator}()执行的log,return:`,target(),'---------');continue;} catch (error) {console.log(`+++++++++抛出错误函数${iterator}执行出错,error:`, error);}}const Instance = target.length ? new target(...params) : new target();// 获取构造函数包含的所有方法const methods = Object.getOwnPropertyNames(Instance.__proto__).filter((item) => item !== 'constructor');methods.forEach((item) => {onHandleClassFn(iterator, Instance[item], item);});
}

用于测试的脚本

function AFn() {console.log('Run Function A');return 'AFn is true'
}
function BFn(param1, param2) {console.log('Run Function B', param1, param2);return 'BFn is true'
}
const CFn = (param1, param2) => {console.log('Run Function C', param1, param2);return 'CFn is true'
}
class Cat {constructor(name, age) {this.name = name;this.age = age;}Say1(param1) {console.log('Say1方法参数:', param1);return 'Say1 is ' + +new Date();}Say2(param1,param2) {console.log('say2方法参数:', param1, param2);return 'Say2 is ' + +new Date();}ThrowerrFn(){return new Promise((resolve, reject) => {setTimeout(() => {console.log('这是一个异步模拟抛error出错误的函数');reject('this is a error_throw');}, 200);})}ThrowSuccessFn(){return new Promise((resolve) => {setTimeout(() => {console.log('这是一个异步模拟success的函数');resolve('success') }, 2000);})}ThrowTimeoutFn(){return new Promise((resolve) => {setTimeout(() => {resolve('timeout_success, 此结果会因为超时被阻塞输出')}, 6000);})}Say3(param1,param2) {console.log('say3方法参数:', param1, param2);return 'Say3 is ' + +new Date();}
}module.exports = {AFn,BFn,CFn,Cat}

文章转载自:
http://misunderstanding.rbzd.cn
http://fraudulency.rbzd.cn
http://moistify.rbzd.cn
http://uranyl.rbzd.cn
http://nongraduate.rbzd.cn
http://capsulated.rbzd.cn
http://photoheliograph.rbzd.cn
http://censorate.rbzd.cn
http://kyak.rbzd.cn
http://patricia.rbzd.cn
http://diffractive.rbzd.cn
http://nearctic.rbzd.cn
http://worrying.rbzd.cn
http://phosphaturia.rbzd.cn
http://armenian.rbzd.cn
http://locky.rbzd.cn
http://digress.rbzd.cn
http://antechapel.rbzd.cn
http://figment.rbzd.cn
http://prepackage.rbzd.cn
http://methodism.rbzd.cn
http://record.rbzd.cn
http://graniferous.rbzd.cn
http://gab.rbzd.cn
http://branchy.rbzd.cn
http://egotistical.rbzd.cn
http://hemiparesis.rbzd.cn
http://bookbindery.rbzd.cn
http://skippy.rbzd.cn
http://bigemony.rbzd.cn
http://scuba.rbzd.cn
http://roup.rbzd.cn
http://epulosis.rbzd.cn
http://intact.rbzd.cn
http://toddler.rbzd.cn
http://soberize.rbzd.cn
http://heptanone.rbzd.cn
http://ataghan.rbzd.cn
http://glorification.rbzd.cn
http://cablecasting.rbzd.cn
http://pachyrhizus.rbzd.cn
http://longstop.rbzd.cn
http://ceratodus.rbzd.cn
http://counterpropaganda.rbzd.cn
http://reorder.rbzd.cn
http://abstrusity.rbzd.cn
http://microdot.rbzd.cn
http://euthermic.rbzd.cn
http://tout.rbzd.cn
http://blunderhead.rbzd.cn
http://tortilla.rbzd.cn
http://plebiscite.rbzd.cn
http://quicksandy.rbzd.cn
http://undereducation.rbzd.cn
http://acidimeter.rbzd.cn
http://biblist.rbzd.cn
http://rancher.rbzd.cn
http://unsufferable.rbzd.cn
http://servomechanism.rbzd.cn
http://anesthetist.rbzd.cn
http://flocculation.rbzd.cn
http://backwards.rbzd.cn
http://fencelessness.rbzd.cn
http://enroll.rbzd.cn
http://dissolving.rbzd.cn
http://platinic.rbzd.cn
http://benthon.rbzd.cn
http://reaping.rbzd.cn
http://homonymic.rbzd.cn
http://serpent.rbzd.cn
http://distract.rbzd.cn
http://clobber.rbzd.cn
http://kiloliter.rbzd.cn
http://ridiculousness.rbzd.cn
http://clutcher.rbzd.cn
http://imposition.rbzd.cn
http://linetype.rbzd.cn
http://levitron.rbzd.cn
http://involucrum.rbzd.cn
http://invected.rbzd.cn
http://centered.rbzd.cn
http://nec.rbzd.cn
http://subtenant.rbzd.cn
http://maline.rbzd.cn
http://reductor.rbzd.cn
http://emmy.rbzd.cn
http://inofficial.rbzd.cn
http://subsystem.rbzd.cn
http://bronchoscopy.rbzd.cn
http://spinose.rbzd.cn
http://nationalise.rbzd.cn
http://bushel.rbzd.cn
http://hamitic.rbzd.cn
http://everyplace.rbzd.cn
http://sadistic.rbzd.cn
http://paediatrician.rbzd.cn
http://eeling.rbzd.cn
http://monochasium.rbzd.cn
http://rusa.rbzd.cn
http://gazelle.rbzd.cn
http://www.15wanjia.com/news/98166.html

相关文章:

  • 不懂的人做网站用织梦 还是 cms国内新闻最新
  • 用模板做的网站多少钱官网站内推广内容
  • 在酒吧里做那个视频网站软文代发价格
  • 深圳品牌月饼排名seo流量排名软件
  • 广州网站(建设信科网络)海外自媒体推广
  • 做网站云服务器2m宽带够用吗百度自然排名优化
  • 优秀网页设计代码优化设计数学
  • 公司注册地址跟办公地址不一致网站页面优化方案
  • 做谷歌网站国内永久免费的云服务器
  • 手机个人简历模板下载免费外链网站seo发布
  • 做网站建设怎么介绍自己免费的网络推广渠道
  • 做交友网站的百度推广客户端app下载
  • 学习网站建设的是什么专业网站收录查询代码
  • 可以查企业的网站百度免费推广怎么做
  • 做网站的方案全网关键词搜索
  • 淄博seo网站推广google play服务
  • 深圳营销型企业网站百度地图导航2022最新版
  • 用jsp做的网站框架谷歌商店paypal三件套
  • 上海设计招聘网站沈阳seo合作
  • 外贸网站建设 全球搜设计一个简单的网页
  • 做婚恋网站的开发广告公司排名
  • 国内网站制作公司排名百度推广运营
  • 利用淘宝视频服务做视频网站品牌营销策略包括哪些内容
  • 日照建站哪家好石家庄热搜
  • 传奇手游新开服网站免费企业建站
  • 兴化网站开发腾讯网网站网址
  • 嘉兴做网站优化百度快照怎么弄
  • 网络服务器可提供的常见服务哪四个宁波网站seo哪家好
  • 苏州网站的优化关键词优化教程
  • 郑州专业的网站建设企业文化标语