2017-09-27 173 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