2017-09-27 169 views
2

我正在使用Mocha测试以es6阶段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"] 
} 
+0

摩卡的工作并不是“认识动态进口”。摩卡运行在节点和**节点**没有本地支持导入(动态或静态)。 Babel必须将它们转换为Node可以使用的东西。我从经验中知道,正确配置的Babel在转换静态导入时没有问题。我不知道它如何处理动态的。我没有在[Node的文档](https://nodejs.org/api/modules.html)中看到任何与动态导入等价的直接本地节点。 – Louis

+0

@Louis,但如果我使用巴贝尔作为编译器(与阶段0预设),它不应该妥善处理它? –

回答

3

正如@louis所提到的,这是一个节点问题。该解决方案是将dynamic-import-node插件添加到巴贝尔:

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

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

+0

'syntax-'插件是为了解析'import()'而不是_not_变换它。像'dynamic-import-node'这样的插件一起使用是没有用的。你应该删除它。 – loganfsmyth

+0

@loganfsmyth使用上述插件中的任何一个,而没有其他原因节点抛出所述错误。任何想法为什么?有更好的解决方案 –

+1

您需要'dynamic-import-node',但不需要'syntax-dynamic-import'。 'dynamic-import-node'插件[在其内部包含'syntax-dynamic-import'。](https://github.com/airbnb/babel-plugin-dynamic-import-node/blob/master/src/index .js#L1) – loganfsmyth