美文网首页
2019-10-29 终于追踪到了NodeJS借助esprima

2019-10-29 终于追踪到了NodeJS借助esprima

作者: 五大RobertWu伍洋 | 来源:发表于2019-10-29 15:11 被阅读0次

借助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
  };
};

从侧面说明了写单元测试将节省多少debug的时间啊!明明显示了哪一行出错的信息,我没仔细看,非要去debug。

相关文章

网友评论

      本文标题:2019-10-29 终于追踪到了NodeJS借助esprima

      本文链接:https://www.haomeiwen.com/subject/dltgvctx.html