2016-04-23 52 views
14
import { 
    foobar1, 
    foobar2, 
    foobor3, //typo! this key doesn't exist in the module. 

} from './module_file.js' 


console.log(foobar1, foobar2, foobar3) //EXPLODES 

使用新的ES6樣式導入語句時,我犯的最常見的愚蠢錯誤之一是在對象解構中的一個鍵中會出現拼寫錯誤。我想不出一個我希望解構賦值中的值爲undefined的單個實例。有沒有辦法強制導入語句失敗 - 如果我試圖導入的項目之一是未定義的?使用ES6導入語句時,是否有辦法防止項目未定義?

即:

import { 
    doesntExistInModule //EXPLODE NOW! 
} from './module_file.js' 
+0

我認爲只有這樣,才能做到這將是一個複雜的短絨。檢查ESlint插件是否有這樣的情況。 – PitaJ

+1

或者編寫你自己的Babel插件,它將進口包裝在一個額外的檢查中,並且如果它們未定義則拋出一個錯誤。 –

回答

2

在規範模塊東西是相當粗糙的,但我相信一個真正的實施,將在15.2.1.16.4 ModuleDeclarationInstantiation() Concrete Method step 12.d.iii在這種情況下拋出SyntaxError。由於沒有合法的實現,我不知道你是否正在討論如何在轉換的代碼中執行它,或者如果你沒有意識到這種情況,並會滿意地知道它會起作用最終的方式。之前有人試圖在巴別爾實施這種檢查,但據我所知,實際上沒有做到這一點。 Babel孤立地編譯每個模塊。

此外,這是而不是對象解構,它只是有類似的語法。

1
  • 沒有鉤子允許模塊在其依賴關係加載之前運行某些代碼。這意味着模塊無法控制如何加載它們的依賴關係。
  • 導入錯誤沒有錯誤恢復。一個應用程序可能包含數百個模塊,如果有任何內容無法加載或鏈接,則不運行任何內容。你不能在try/catch塊中導入。 (這裏的上攻 是因爲系統是如此的靜,的WebPack可以在編譯時檢測這些 錯誤給你的。)

有關詳細信息,read it out

相關問題