¿Qué navegadores admiten la sintaxis de importación y exportación para ECMAScript 6?


Actualmente estoy escribiendo una aplicación web usando la pila MEDIA, y estoy intentando escribir código en ECMAScript 6 JavaScript; sin embargo, estoy recibiendo errores tanto en Chrome como en Firefox al usar la sintaxis de importación y exportación. ¿Hay actualmente algún navegador que soporte completamente ECMAScript 6?

Tenga en cuenta: No estoy preguntando cuándo ECMAScript 6 será compatible con los navegadores. Estoy preguntando qué navegadores soportan la sintaxis de importación y exportación de ECMAScript 6. Ver 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 y Firefox soporte import y export sintaxis (existen pruebas para adecuada parsing ).

Lo que no es compatible es la carga de módulos: no puede cargar el módulo de ninguna manera, porque la especificación no está completa. Tienes que usar algún tipo de paquete de módulos para esto. No soy desarrollador front-end, pero he escuchado buenas opiniones sobre Rollup de mis compañeros de trabajo.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-01 15:27:11

Está soportado en:

  • Safari 10.1
  • Cromo 61
  • Firefox 54 – detrás del dom.moduleScripts.configuración habilitada en about: config.
  • Borde 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-12 08:03:29

Ahora hay un pollyfill que puede usar para importar el módulo ES6.

Lo probé con éxito en Chrome.

Aquí está el enlace: http://github.com/ModuleLoader/browser-es-module-loader


También se implementa de forma nativa en 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-25 23:35:46

Como otros han dicho, el apoyo a ella es todavía muy limitado. Pero incluso si hubiera pleno apoyo.... ¿sería inteligente usarlo? ¿Cómo haríamos eso?

Piénsalo. Una aplicación JS típica escrita con módulos JS de nodo contiene fácilmente docenas, incluso cientos de paquetes (muy pequeños). ¿Realmente queremos tantas peticiones?

Browserify, Webpack, Rollup, etc. son tan populares porque nos permiten agrupar muchos paquetes pequeños en una descarga rápida. Con división de código podemos dejar que el módulo bundler decida en el momento de transpilación, basado en el código que nuestras páginas están utilizando realmente y en algunos ajustes de configuración, cuántos paquetes crear y qué poner en cada uno de ellos. De esta manera podemos escribir muchos paquetes pequeños y servirlos como un (par de) paquetes grandes.

Mi punto es que deberíamos dividir nuestro código en paquetes que funcionen bien en un nivel conceptual, luego agrupar esos paquetes en paquetes que funcionen bien en un nivel técnico (de red). Si escribimos nuestro código basado en el tamaño óptimo del paquete de red, terminamos sacrificando la modularidad en el proceso.

Mientras tanto, usarlo probablemente solo aumentará la confusión. Por ejemplo, mira el ejemplo en el blog Edge:

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

¿Nota cómo agregan la extensión .js a la cadena from? En el nodo JS usualmente escribimos esto como:

import { sum } from './math';

Entonces, ¿el código anterior también funcionará en Edge? ¿Y qué hay de los paquetes con nombre? Me temo que vamos a ver un montón de incompatibilidad aquí antes de que averigua cómo hacer que estos caminos funcionen en todos los ámbitos.

Me atrevería a adivinar que para la mayoría de los desarrolladores, System.import permanecerá en su mayoría invisible en los navegadores y que solo el propio software de agrupación comenzará a usarlo (con fines de eficiencia) cuando se convierta en la corriente principal.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-27 15:08:21

De acuerdo con Guía de Estilo Javascript de Google :

No utilice los módulos ES6 todavía (es decir, las palabras clave export y import ), ya que su semántica aún no está finalizada. Tenga en cuenta que esta política ser revisado una vez que la semántica sea completamente estándar.

// 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';

Sin embargo, import y export se implementan en muchos transpilers, como el Compilador Traceur, Babel o 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-09 16:47:38