【问题标题】:Mocha doesn't recognize dynamic importsMocha 无法识别动态导入
【发布时间】:2018-03-08 19:28:09
【问题描述】:

我正在使用 Mocha 测试一个用 es6 stage-0 语法编写的 react/webpack/babel 应用程序,其中包括 dynamic imports。 Webpack 编译它没有错误,但是 mocha 在达到动态导入语法时会抛出以下错误:

import('path/to/file').then(...)  
^^^^^^  
SyntaxError: Unexpected token import  

我正在运行的命令是:

$ mocha --compilers js:babel-register src/**/*.test.js

在我的.babelrc 中,我必须关注:

{
  "presets": ["es2015", "react", "stage-0"]
}

【问题讨论】:

  • “识别动态导入”不是 Mocha 的工作。 Mocha 在 Node 中运行,而 Node 不支持导入(动态或静态)。 Babel 必须将它们转换为 Node 可以使用的东西。我从经验中知道,正确配置的 Babel 转换静态导入没有问题。我不知道它如何处理动态的。我在Node's documentation 中看不到任何与动态导入等效的直接本机节点。
  • @Louis 但如果我使用 babel 作为编译器(带有 stage-0 预设),它不应该正确处理它吗?

标签: node.js ecmascript-6 mocha.js babeljs


【解决方案1】:

正如@louis 所说,这是一个节点问题。解决方法是在babel中添加dynamic-import-node插件:

{
  "presets": ["es2015", "react", "stage-0"],
  "plugins": ["dynamic-import-node"]
}

这将在节点中添加对import(...) 语法的支持。

【讨论】:

  • syntax- 插件适用于您想要解析 import()对其进行转换的情况。将它与dynamic-import-node 之类的插件一起使用是无操作的。你应该删除它。
  • @loganfsmyth 使用上述任何插件而没有其他原因导致节点抛出所述错误。知道为什么吗?有更好的解决方案吗?
  • 您需要dynamic-import-node,但不需要syntax-dynamic-importdynamic-import-node 插件includes syntax-dynamic-import inside itself.
  • @loganfsmyth 是的,你是对的,不知道为什么以前没有它就不能工作。答案已更新。
猜你喜欢
  • 1970-01-01
  • 2016-05-20
  • 2023-03-31
  • 2021-04-23
  • 2018-09-23
  • 2020-10-13
  • 2021-04-27
  • 2021-09-11
相关资源
最近更新 更多