是否可以在 Babel 插件访问者中运行异步代码



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

visitor: {
  TaggedTemplateExpression(path) {
    if (path.node.tag.name !== 'Style') return;
    ProcessStyle(path).then((data) => {
      path.replaceWith(t.StringLiteral(data.data));
    });
  },
}

目前可能吗?

Babel 的 API,例如 babel.transform() ,同步返回生成的转换。这意味着插件无法异步,因为 Babel 本身是完全同步的。

根据您的要求,您可以考虑使用 child_process.execSync 同步运行另一个 Node 进程,以便在阻止 Babel 的同时完成异步工作。

https://github.com/ForbesLindesay/sync-rpc

这将在单独的进程中运行异步代码,并通过网络连接进行通信

我发现用child_process和execSync/spawnSync可靠地做到这一点非常困难。 我总是遇到缓冲区大小有限的问题,即使将maxBuffer设置为无穷大,导致数据传输不完整和神秘的语法错误(代码行在大约1000个字符后被切断)

最新更新