ES2015 导入在 Firefox 中不起作用(即使在顶级)

IT技术 javascript html firefox ecmascript-6 es6-modules
2021-02-02 17:27:29

这些是我的示例文件:

<!DOCTYPE html>
<html>
<head>
  <title>Test</title>
  <script src="t1.js"></script>
</head>
<body></body>
</html>

t1.js:

import Test from 't2.js';

t2.js:

export const Test = console.log("Hello world");

当我在 Firefox 46 中加载页面时,它返回“SyntaxError:import 声明可能只出现在module的顶层” - 但我不确定 import 语句可以在这里得到多少顶层。这个错误是一个红鲱鱼,是导入/导出还不支持吗?

6个回答

实际上你得到的错误是因为你需要明确声明你正在加载一个module - 只有这样才允许使用module:

<script src="t1.js" type="module"></script>

我在这篇关于在浏览器中使用 ES6 导入的文档中找到了它推荐阅读。

这些浏览器版本完全支持(及更高版本;caniuse.com上的完整列表):

  • 火狐 60
  • 铬(桌面)65
  • 铬(安卓)66
  • Safari 1.1

在较旧的浏览器中,您可能需要在浏览器中启用一些标志:

  • Chrome Canary 60 – 在chrome:flags.
  • Firefox 54 –dom.moduleScripts.enabledabout:config.
  • Edge 15 – 在about:flags.
需要一个完整的例子,而不仅仅是导入
2021-03-16 17:27:29
@fredoverflow 是的,必须指定全名,这与 Node.js 不同。
2021-03-28 17:27:29
谢谢; 这似乎是新信息(将上一个答案的浏览器支持表与developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/... 进行比较)所以我将切换到您的答案,因为import不再不受支持。
2021-03-29 17:27:29
@Catweazle 你确定是'./t2.js'不是'./t2'没有.js
2021-04-01 17:27:29
现在可以在 edge 16299 和 chrome 64 中没有任何标志/设置的情况下工作。一个警告需要导入路径,而不是文件,所以在 t1.js 中: import Test from './t2.js';
2021-04-05 17:27:29

这已经不准确了。 当前所有浏览器现在都支持 ES6 module

原答案如下

importMDN 上

此功能目前未在任何浏览器中实现。它在许多转译器中实现,例如 Traceur Compiler、Babel 或 Rollup。

浏览器不支持import.

这是浏览器支持表:

在此处输入图片说明

如果您想导入 ES6 module,我建议您使用转译器(例如babel)。

@TomášZato,仅取决于您使用的浏览器决定处理它
2021-03-12 17:27:29
如果这些功能没有实现,为什么我不会收到语法错误或错误消息,告诉我它们没有实现?这没有任何意义。
2021-03-25 17:27:29
@evolutionxbox:如果功能没有 imelemented,那么也没有标志。
2021-03-31 17:27:29
实际上,我的代码中有一个错误,它工作得很好。不知道为什么你的答案得到了赞成。不支持导入的浏览器会报告它。有问题的错误是使用导入的实际错误。
2021-04-06 17:27:29
您可以使用标志(例如在 chrome 中)打开这些功能吗?
2021-04-11 17:27:29

在导入文件时使用 .js 文件扩展名解决了同样的问题(不要忘记type="module在脚本标签中设置)。

简单地写:

import foo from 'foo.js';

代替

import foo from 'foo';
还要仔细检查您是否需要领先/./在路径中,例如'./foo.js'
2021-03-19 17:27:29

Modules work only via HTTP(s), not locally

如果您尝试通过file:// 协议在本地打开网页,您会发现导入/导出指令不起作用。使用本地 Web 服务器(例如静态服务器)或使用编辑器的“实时服务器”功能(例如 VS Code Live Server Extension)来测试module。

你可以在这里参考:https : //javascript.info/modules-intro

Live server VS code extension链接:https : //marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer

添加type=module导入和导出module的脚本将解决这个问题。