При использовании инструкции импорта ES6 существует ли способ защиты от элементов undefined?

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. Есть ли способ заставить оператор импорта работать с ошибкой, если один из элементов, которые я пытаюсь импортировать, - undefined?

т

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

Ответ 1

Элемент модуля в спецификации довольно грубый, но я считаю, что реальная реализация вызовет SyntaxError в 15.2.1.16.4 ModuleDeclarationInstantiation() Concrete Шаг метода 12.d.iii в этом случае. Поскольку никаких законных реализаций не существует, я не знаю, говоришь ли вы о способе сделать это в преобразованном коде в то же время, или если вы не понимаете этого случая и будете удовлетворены, чтобы знать, что это сработает в конце концов. Раньше были разговоры о попытке осуществить такую ​​проверку в Вавилоне, но насколько я знаю, ничего не было сделано по этому поводу. Babel компилирует каждый модуль отдельно.

Кроме того, это не разрушение объектов, оно имеет аналогичный синтаксис.

Ответ 2

  • Нет никакого крючка, позволяющего модулю запускать некоторый код перед загрузкой зависимостей. Это означает, что модули не имеют контроля над тем, как загружаются их зависимости.
  • Нет ошибок при восстановлении ошибок импорта. Приложение может иметь в себе сотни модулей, и если что-то не удается загрузить или связать, ничего не бежит. Вы не можете импортировать в блок try/catch. (Вверху здесь заключается в том, что, поскольку система настолько статична, webpack может обнаруживать эти ошибки для вас во время компиляции.)

Для более подробной информации прочитайте его