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

福建泉州曾明军的网站外包项目接单平台

福建泉州曾明军的网站,外包项目接单平台,做网站推广费用,一个网站做两个优化可以做吗这边遇到一个类似于测试的需求,需要从一个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://www.tj-hxxt.cn/news/25123.html

相关文章:

  • 哈尔滨多语言网站建设免费网站推广群发软件
  • 怎么把自己的网站推广出去搜索引擎环境优化
  • 福永三合一网站设计北京培训学校
  • 福建网站建设最好用的系统优化软件
  • 网站内容不显示不出来网络营销模式下品牌推广研究
  • 台州外贸网站建设企业文化建设
  • 如何做网站模版域名注册网站
  • 卡地亚手表真伪查询网站企业关键词优化公司
  • 松山湖短视频seo排名seo搜索排名优化
  • 网站导航插件seo培训优化课程
  • 网站ui设计用什么软件做外包推广公司
  • 徐州网站开发服务网络策划
  • 网站开发实验结论淄博信息港聊天室网址
  • 哈尔滨工程招标信息网百度seo快排软件
  • 网站代码特效广告南京seo网站管理
  • 自己做网站要会什么软件天津百度推广公司地址
  • 拉萨叶子网站建设优化大师会员兑换码
  • 凡科建的网站可以做seo吗市场营销专业就业方向
  • 长沙门户网站小区推广最有效的方式
  • 重庆建设工程信息网查安全员的搜索引擎优化主要包括
  • 网站制作广告优化外包服务公司
  • 做校园后勤管理网站得重点难点长沙网站制作
  • 建筑学太烧钱了长沙官网seo推广
  • 做奶茶的网站怎么来做优化百度大数据预测平台
  • 成都网站建设开发网络软文推广平台
  • 苹果手机免费做ppt模板下载网站凡科建站模板
  • 郑州做网站推广外包腾讯体育nba
  • 网站制作简单模版大连网站排名推广
  • 免费做app的网站哪个好百度首页纯净版
  • 航佳网站建设百度网站客服