2019-10-29 终于追踪到了NodeJS借助esprima
2019-10-29 本文已影响0人
五大RobertWu伍洋
借助esprima模块写了段自动导出所有函数和常量的NodeJS语法解释:
const autoParse = () => {
const esprima = require("esprima");
const fs = require("fs");
const program = fs.readFileSync(__filename, "utf8");
const parsed = esprima.parseScript(program.replace(/^#!(.*\n)/, ""));
parsed.body.forEach(fn => {
if (fn.type.endsWith("VariableDeclaration")) {
const fnv = fn.declarations[0];
module.exports[fnv.id.name] = eval(fnv.id.name);
}
if (fn.type.endsWith("FunctionDeclaration")) {
module.exports[fn.id.name] = eval(fn.id.name);
}
});
};
autoParse();
取代了之前的手动导出:
// module.exports = {
// isNull,
// checkToStr,
// getPreviewLink,
// replaceand,
// def,
// getPackageName,
// getOs,
// setapivalues,
// checkToValue,
// getIncent,
// hasNoValue,
// arr2str,
// str2arr,
// loop_creatives,
// loop_creatives_ext,
// Trim,
// hex_sha1,
// isArray,
// containsStr,
// autoAppname,
// random_item,
// easyNetlink,
// filterpackages,
// sysOffers,
// sysOffersFlatMap,
// commonOfferFilter,
// netunionOfferFilter,
// finalOffer,
// highestOffer,
// objType,
// sysOffersFlatMapGrpc,
// zipObj,
// };
然而单元测试随机报错:
Line 428: Unexpected token ...
可是我没有认真看,于是开始debug:
终于追踪到了现场:为何说unexpected token
image.png
image.png
原来是ES6的解构赋值语法导致的,莫非esprima不支持它?
官网测试下上述函数就会报错了 https://esprima.org/demo/parse.html
所以目前研究到此确认问题所在了: 应该不支持对对象解构赋值。
下次我呀研究acorn模块是否可以满足需求。
const finalOffer = (headoffer, unioninfo) => {
// const midoffer =setapivalues(headoffer);
const midoffer = getMidOffer(headoffer).value();
const net_link = autoAppname(
midoffer.tracklink,
unioninfo,
midoffer.platform
);
const track_link = getTrack_link(unioninfo, midoffer);
return {
...midoffer,
nettrack_link: net_link,
track_link: track_link
};
};