Javascript 当使用ES6导入语句时,是否有方法防止未定义的项?
在使用新的ES6风格的import语句时,我经常犯的一个愚蠢的错误是,在对象分解过程中,我会在其中一个键中输入错误。我想不出有哪一个实例我希望分解赋值中的值是Javascript 当使用ES6导入语句时,是否有方法防止未定义的项?,javascript,ecmascript-6,Javascript,Ecmascript 6,在使用新的ES6风格的import语句时,我经常犯的一个愚蠢的错误是,在对象分解过程中,我会在其中一个键中输入错误。我想不出有哪一个实例我希望分解赋值中的值是未定义的。如果我尝试导入的某个项未定义,是否有任何方法可以强制导入语句快速失败 即: 导入{ DoesNTESTINMODule//EXPLODE NOW!规范中的模块内容非常粗糙,但我相信在这种情况下,真正的实现会抛出一个语法错误。由于没有合法的实现,我不知道您是否正在谈论一种同时在传输代码中实现它的方法,或者您是否意识到这是一种情况nd
未定义的
。如果我尝试导入的某个项未定义,是否有任何方法可以强制导入语句快速失败
即:
导入{
DoesNTESTINMODule//EXPLODE NOW!规范中的模块内容非常粗糙,但我相信在这种情况下,真正的实现会抛出一个语法错误。由于没有合法的实现,我不知道您是否正在谈论一种同时在传输代码中实现它的方法,或者您是否意识到这是一种情况nd会很高兴知道它最终会以这种方式工作。之前有人谈论过尝试在Babel中实现这种检查,但据我所知,实际上没有做过任何事情。Babel单独编译每个模块
此外,这不是对象分解,它只是具有类似的语法
- 没有钩子允许模块在其依赖项加载之前运行某些代码。这意味着模块无法控制如何加载
将加载它们的依赖项
- 导入错误没有错误恢复。一个应用程序中可能有数百个模块,如果加载或链接失败,
什么都不运行。您不能在try/catch块中导入。(此处为上边)
是因为系统是静态的,webpack可以检测到这些吗
编译时的错误。)
要了解更多详细信息,我认为唯一的方法是使用复杂的linter。请检查类似的ESlint插件。或者编写自己的Babel插件,将导入包装在附加检查中,如果未定义,则抛出错误。
import {
foobar1,
foobar2,
foobor3, //typo! this key doesn't exist in the module.
} from './module_file.js'
console.log(foobar1, foobar2, foobar3) //EXPLODES