使用ES6 import语句时,有没有办法防止未定义的项目?

时间:2016-04-23 01:40:58

标签: javascript ecmascript-6

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。如果我尝试导入的其中一个项目未定义,有没有办法强制导入语句失败?

即:

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

2 个答案:

答案 0 :(得分:2)

规范中的模块内容非常粗糙,但我相信在这种情况下,真正的实现会在15.2.1.16.4 ModuleDeclarationInstantiation( ) Concrete Method step 12.d.iii处抛出SyntaxError。由于没有合法的实现,我不知道你是否在谈论在此期间在转换代码中做到这一点的方法,或者如果你没有意识到这种情况并且我们会很高兴知道它最终会以这种方式工作。在尝试在Babel中实施这种检查之前,已经有过谈话,但据我所知,实际上并没有做到这一点。 Babel孤立地编译每个模块。

此外,这是对象解构,它只是具有相似的语法。

答案 1 :(得分:1)

  
      
  • 在依赖项加载之前,没有允许模块运行某些代码的钩子。这意味着模块无法控制如何使用   他们的依赖关系已加载。
  •   
  • 导入错误没有错误恢复。一个应用程序可能包含数百个模块,如果任何内容无法加载或链接,   什么都没有。您无法在try / catch块中导入。 (这里有好处   是因为系统是如此静态,webpack可以检测到这些   在编译时你的错误。)
  •   

有关详细信息,请read it out