在节点中运行时,如何使用babel动态转换从node_modules消耗的软件包?

时间:2019-07-11 21:14:01

标签: node.js babeljs

我正在编写一个NodeJS应用,我们将其称为App。

App消耗了另一个团队的已发布模块,我们将其称为“模型”。

模型使用一个已发布的名为Foo的模块。 Foo作为ES6模块发布。

当App尝试在Node中运行时,由于“ Foo”作为ES6模块发布且Node不支持ES6模块(未启用某些实验性功能),因此它失败并显示“ SyntaxError:意外的令牌导出”

我知道有一个babel plugin可以将ES6转换为CommonJS模块,但是我不确定在这种情况下使用它的正确/最佳方法是什么。请记住,我的“ App”不会直接消耗Foo,而只是间接消耗,因为App消耗了消耗Foo的Model。

  • 是否有某种方法可以告诉Node,无论何时它尝试加载Foo模块,都应该在运行时首先通过babel运行它?这可能吗?看来这将是侵入性最小的解决方案。
  • 我知道我可以在构建App时静态地转换Foo的JS,但是除非我将其转换到node_modules中的完全相同的位置,否则引用Foo的Model中的代码将不知道在哪里找到它,并更改内容似乎不正确。
  • 作为发布Model本身的一部分,Model的发布者是否应该将Foo转换/重新发布为CommonJS模块?

我不知道其中哪一个是可能的,或者是否有一个好主意。是否存在此类问题的先例/最佳实践?

谢谢!

0 个答案:

没有答案