2016-02-24 24 views
0

我正在爲一個項目使用webpack,ES6和Babel。模塊有一個require語句,像這樣:爲什麼切換到需要導入修復運行時錯誤?

var ajaxGetJSON = require("../utils/ajaxGetJSON");

的捆綁編譯罰款,但扔了運行時錯誤

Uncaught TypeError: ajaxGetJSON is not a function

下面是的WebPack提供給我的模塊對象的檢查:

enter image description here

當我將要求更改爲import ajaxGetJSON from "../utils/ajaxGetJSON";運行時錯誤不會發生,並且應該是功能ajaxGetJSON的檢查對象正常工作。

ajax模塊使用export default myObject

爲什麼切換到導入可以解決我的問題?

回答

1

正如您從調試器工具提示中看到的,require()會生成一個ES6模塊對象(這是babel傳輸模塊的對象),它不是函數,但具有其作爲.default屬性的功能。

ajaxGetJSON該模塊的默認導出,您應該如此導入它。如果您使用ES6模塊,則根本不應使用require

+0

我現在正在意識到這一點;當我們需要使用rewire來模擬測試套件中的依賴關係時,我們主要使用require。遵守的好規則。如果我們想要解決這個問題,我們需要'let foo = require(「foo」)。default'呢? –

+0

是的,這將工作(直到babel更改其模塊格式 - 這不太可能,但[之前已經發生](http://stackoverflow.com/q/33505992/1048572))。 – Bergi