在Babel插件访问器中运行异步代码是否可能?

4

我正在开发一个Babel插件,它可以将一些代码通过异步模块运行。在修改路径之前,我需要等待该结果。

visitor: {
  TaggedTemplateExpression(path) {
    if (path.node.tag.name !== 'Style') return;

    ProcessStyle(path).then((data) => {
      path.replaceWith(t.StringLiteral(data.data));
    });
  },
}

这目前是否可行?
2个回答

4
例如,Babel的API babel.transform() 同步返回转换后的结果。这意味着插件无法异步执行,因为Babel本身是完全同步的。
根据您的要求,您可以考虑使用child_process.execSync来同步运行另一个Node进程以执行异步工作,同时阻止Babel。

2
这个工具可以在一个独立的进程中运行异步代码,并通过网络连接进行通信。使用child_process和execSync / spawnSync实现这一点非常困难,即使将maxBuffer设置为无限大,也经常会出现缓冲区大小有限的问题,导致数据传输不完整以及神秘的语法错误(代码行在1000个字符后被截断)。我们发现这个工具非常可靠且易于使用。链接如下:https://github.com/ForbesLindesay/sync-rpc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接