我正在开发一个通过异步模块运行一些代码的babel插件。在修改路径之前,我需要等待结果。
visitor: {
TaggedTemplateExpression(path) {
if (path.node.tag.name !== 'Style') return;
ProcessStyle(path).then((data) => {
path.replaceWith(t.StringLiteral(data.data));
});
},
}
这目前可能吗?
答案 0 :(得分:3)
Babel的API,例如babel.transform()
,同步返回结果转换。这意味着插件无法异步,因为Babel本身是完全同步的。
根据您的要求,您可以考虑使用child_process.execSync
同步运行另一个Node进程来阻止Babel执行异步工作。
答案 1 :(得分:0)
https://github.com/ForbesLindesay/sync-rpc
这在单独的过程中运行异步代码,并通过网络连接进行通信
我发现使用child_process和execSync / spawnSync很难可靠地做到这一点。即使将maxBuffer设置为Infinity,我也总是遇到缓冲区大小有限的问题,这会导致数据传输不完整和神秘的语法错误(代码行在大约1000个字符后被切断)