Które przeglądarki obsługują składnię importu i eksportu dla ECMAScript 6?

Obecnie piszę aplikację internetową przy użyciu stosu MEAN i próbuję napisać kod w JavaScript ECMAScript 6; jednak dostaję błędy zarówno w Chrome, jak i Firefox podczas korzystania ze składni importu i eksportu. Czy są obecnie jakieś przeglądarki, które w pełni obsługują ECMAScript 6?

Uwaga: nie pytam kiedy ECMAScript 6 będzie obsługiwany przez przeglądarki. Pytam, które przeglądarki obsługują składnię importu i eksportu ECMAScript 6. Zobacz też https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla#Features_not_yet_supported_by_Firefox

Author: Bergi, 2015-11-04

5 answers

Chrome i Firefox wsparcie import i export składnia (istnieją testy dla właściwe parsing ).

To, co nie jest obsługiwane, to Ładowanie modułów - nie możesz załadować modułu w żaden sposób, ponieważ specyfikacja dla niego nie jest kompletna. Musisz użyć do tego jakiegoś modułu. Nie jestem front-end developerem, ale słyszałem dobre opinie oRollup od moich współpracowników.

 10
Author: Ginden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-01 15:27:11

Jest obsługiwana w:

  • Safari 10.1
  • Chrome 61
  • Firefox 54 - za dom.moduleScripts.włączone ustawienie w about: config.
  • Edge 16
 28
Author: Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-12 08:03:29

Teraz jest pollyfill , którego możesz użyć do zaimportowania modułu ES6.

Przetestowałem go pomyślnie na Chrome.

Oto link: http://github.com/ModuleLoader/browser-es-module-loader


Jest również zaimplementowany natywnie w Edge 14:

Https://blogs.windows.com/msedgedev/2016/05/17/es6-modules-and-beyond

 4
Author: Supersharp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-25 23:35:46

Jak już powiedzieli inni, poparcie dla niego jest nadal bardzo ograniczone. Ale nawet jeśli było pełne poparcie.... czy mądrze byłoby go użyć? Jak mielibyśmy to zrobić?

Pomyśl o tym. Typowa aplikacja JS napisana z modułami Node JS z łatwością zawiera dziesiątki, a nawet setki (bardzo małych) pakietów. Czy naprawdę chcemy aż tylu próśb? Browserify, Webpack, Rollup itp. są tak popularne, ponieważ pozwalają nam połączyć wiele małych pakietów w jedno szybkie pobieranie. Z podziałem kodu możemy pozwolić, aby moduł bundler decydował w czasie transpilacji, na podstawie kodu, którego faktycznie używają nasze strony i niektórych ustawień konfiguracyjnych, ile pakietów utworzyć i co umieścić w każdym z nich. W ten sposób możemy napisać wiele małych pakietów i służyć im jako (kilka) duże pakiety.

Chodzi mi o to, że powinniśmy podzielić nasz kod na pakiety, które działają dobrze na poziomie koncepcyjnym, a następnie połączyć te pakiety w pakiety, które działają dobrze na poziomie technicznym (sieciowym). Jeśli piszemy nasz kod w oparciu o optymalny rozmiar pakietu sieciowego, kończymy na poświęceniu modułowości w tym procesie.

W międzyczasie używanie go prawdopodobnie tylko zwiększy zamieszanie. Na przykład spójrz na przykład na blogu Edge:

import { sum } from './math.js';

Zauważ jak dodają rozszerzenie .js do from? W Node JS Zwykle zapisujemy to jako:

import { sum } from './math';

Czy powyższy kod będzie działał również na Edge? A co z nazwanymi pakietami? Obawiam się, że zobaczymy tu wiele niezgodności, zanim dowiedz się, jak sprawić, by te ścieżki działały na całej planszy.

Zaryzykowałbym przypuszczenie, że dla większości programistów System.import pozostanie w większości niewidoczny w przeglądarkach i że tylko oprogramowanie do łączenia w Pakiety zacznie z niego korzystać (dla celów wydajności), gdy stanie się głównym nurtem.

 4
Author: Stijn de Witt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 15:08:21

Zgodnie z Google ' s Javascript Style Guide :

Nie używaj jeszcze modułów ES6 (tj. słów kluczowych export i import ), ponieważ ich semantyka nie jest jeszcze sfinalizowana. Należy pamiętać, że niniejsza polityka będzie być ponownie odwiedzane, gdy semantyka są w pełni standardowe.

// Don't do this kind of thing yet:
//------ lib.js ------
export function square(x) {
    return x * x;
}
export function diag(x, y) {
    return sqrt(square(x) + square(y));
}

//------ main.js ------
import { square, diag } from 'lib';

Jednak import i export są zaimplementowane w wielu transpilerach, takich jak kompilator Traceur, Babel czy Rollup.

 0
Author: Gregory R.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-09 16:47:38