Теперь, когда ES2015 dynamici c import () широко поддерживается, каковы преимущества ES2015 stati c import? - PullRequest
1 голос
/ 23 февраля 2020

Я использую ES2015 Модули все чаще.

Чаще всего я склоняюсь к загрузке модулей с помощью динамического синтаксиса c import(), используя варианты следующих pattern:

import(moduleURL.js).then(importedModule => myFunction(importedModule));

В начале 2020 года этот подход выглядит без ошибок, учитывая, что import() теперь имеет почти универсальную поддержку браузера.

См .: https://caniuse.com/#feat = es6-module-dynamici c -import

Но значит ли это также, что stati c import операторов типа:

  • import * as myModule from 'moduleURL.js'
  • import { myNamedExport } from 'moduleURL.js'
  • import myDefaultExport from 'moduleURL.js'

теперь фактически (хотя и не официально) устарели?

Если нет - и мой предположение состоит в том, что они не являются фактически устаревшими - каковы конкретные технические преимущества операторов stati c import по сравнению с Dynami c import()?

В чем ситуации или контексты, я бы посоветовал использовать первое поверх второго?


Дополнительная литература:

Dynami c import():


Почему я спрашиваю о преимуществах ES2015 stati c import?

Это не просто любопытство.

Я стремлюсь стандартизировать определенные процессы в мой рабочий процесс, и я очень доволен import().

Но прежде чем повсеместно применять import(), я хочу убедиться, что я не пропускаю определенные c функциональные возможности или преимущества, предлагаемые stati c import заявлений, но отсутствующих у более молодого, более динамичного c аналога.

1 Ответ

2 голосов
/ 23 февраля 2020

Работать с синхронным кодом проще, чем с асинхронным кодом. В то время как вы могли бы везде использовать динамический c импорт, для этого потребовалось бы поместить .then с (или await с верхнего уровня, если это поддерживается) везде. Одно это приведет к раздражающему количеству синтаксического шума. Хуже, когда вам нужно импортировать несколько модулей одновременно:

Promise.all([
  import('foo'),
  import('bar')
])
  .then(([foo, bar]) => {
    // do stuff with foo and bar
  });

по сравнению с

import foo from 'foo';
import bar from 'bar';

Меньше синтаксического шума означает меньшую площадь поверхности для ошибок.

Также обратите внимание, что хотя динамический c импорт широко поддерживается, он не поддерживается повсеместно. Относительно небольшая доля пользователей все еще находится на старом Edge, или на FF 56 или ниже, или на Chrome 62 и ниже, или даже на IE11. Некоторые могут подумать, что лучше предоставить сценарии, которые будут работать в основном для всех, а не только для подавляющего большинства. (Это одна из причин, почему Бабель до сих пор так часто используется)

...