哪些浏览器支持ECMAScript 6的导入和导出语法?

Gre*_* R. 38 javascript browser-support ecmascript-6 es6-module-loader es6-modules

我目前正在使用MEAN Stack编写Web应用程序,并尝试在ECMAScript 6 JavaScript中编写代码; 但是,在使用导入和导出语法时,我在Chrome和Firefox中都出现错误.目前是否有任何浏览器完全支持ECMAScript 6?

请注意:我不是在询问浏览器何时支持ECMAScript 6.我问的是哪些浏览器支持ECMAScript 6导入和导出语法.请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla#Features_not_yet_supported_by_Firefox

Ali*_*Ali 33

它支持:

  • Safari 10.1
  • Chrome 61
  • Firefox 54 - 在about:config中的dom.moduleScripts.enabled设置后面.
  • 边缘16

  • 现在自 v60 起在 Firefox 中本地化 (3认同)

Gin*_*den 11

Chrome和Firefox支持importexport语法(存在正确 解析的测试).

不支持的是模块加载 - 您无法以任何方式加载模块,因为它的规范不完整.你必须使用某种模块捆绑器.我不是前端开发人员,但我从同事那里听到Rollup的好评.

  • Rollup是最好的(它超级快)并且最容易开始,并且需要零学习.只需运行命令即可.我已经使用它超过一年,并在几个大小的项目取得了巨大的成功. (6认同)
  • Webpack,SystemJS,AMD,列举了几个捆绑商:) (3认同)
  • @Ginden,Chrome是什么意思支持`import`和`export`语法?我得到了'意外的令牌导出' (3认同)
  • @Ginden等等,它"支持"它但不能在任何情况下实际使用它?这不是"支持"一词的相当宽松的用法吗? (2认同)

Sti*_*itt 7

正如其他人所说,对它的支持仍然非常有限。但即使有充分的支持......使用它是否明智?我们怎么做?

想想看。使用 Node JS 模块编写的典型 JS 应用程序很容易包含数十个甚至数百个(非常小的)包。我们真的想要那么多请求吗?

Browserify、Webpack、Rollup 等如此受欢迎,因为它们允许我们将许多小包捆绑到一个快速下载中。通过代码拆分,我们可以让模块打包器在转换时根据我们的页面实际使用的代码和一些配置设置来决定要创建多少包以及在每个包中放入什么。这样我们就可以写很多的包,并将其作为一个(几个)大捆。

我的观点是,我们应该将我们的代码划分为在概念级别上运行良好的包,然后将这些包捆绑到在技术(网络)级别运行良好的包中。如果我们根据最佳网络数据包大小编写代码,我们最终会在此过程中牺牲模块化。

与此同时,使用它可能只会增加混乱。比如看Edge博客上的例子:

import { sum } from './math.js';
Run Code Online (Sandbox Code Playgroud)

请注意他们如何将扩展名添加.jsfrom字符串中?在 Node JS 中,我们通常这样写:

import { sum } from './math';
Run Code Online (Sandbox Code Playgroud)

那么上面的代码也适用于 Edge 吗?那么命名包呢?我担心在我们弄清楚如何使这些路径全面工作之前,我们会在这里看到很多不兼容。

我大胆地猜测,对于大多数开发人员来说,System.import在浏览器中几乎不可见,只有捆绑软件本身会在它成为主流时开始使用它(出于效率目的)。

  • 请注意,HTTP v2 意味着与创建 1 个大请求相比,发出 1000 个小请求的开销很小。Node js 也用于服务器端应用程序和脚本、工具等,它们不受请求问题的影响(就语义而言,使用“import”与使用“require”大致相同)。 (11认同)
  • @Pacerier 无需侮辱。在渐进式 Web 应用程序的指南中,他们建议您将关键样式和 JS 代码*内联*在文档的头部是有原因的。这些请求会损害您在*现实世界*中的互动时间。是的,这些请求可能会被缓存......然后他们可能不会。每个认真对待 perf 的人都在尽最大努力最小化每个请求的请求数量、往返次数和有效负载大小。因为如果你不限制它,那就是杀死性能的原因。 (3认同)
  • @StijndeWitt,所有这数百个请求 ** 都可以缓存**。甚至是服务工作者。 (2认同)

Sup*_*arp 5

现在有一个pollyfill可以用来导入 ES6 模块。

我在 Chrome 上测试成功。

这是链接:http : //github.com/ModuleLoader/browser-es-module-loader


它也在Edge 14 中本地实现:

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