【问题标题】:Does Electron v4 support ECMAScript modules?Electron v4 是否支持 ECMAScript 模块?
【发布时间】:2019-07-29 08:54:00
【问题描述】:

我正在使用 Electron 编写应用程序。当前版本 4.0.6 基于 Node 10.11.0 和 Chrome 69.0.3947.106。

我认为最新版本的 Electron 会支持 ECMAScript (ES6) 模块,但到目前为止我还不能让它们工作。特别是,在启动应用程序时,该行:

从 './action' 导入 { runTask };

给出运行时错误:

Uncaught SyntaxError: Unexpected token {

在我努力追查问题之前,我想知道 Electron 中模块支持的状态。

Electron 版本 4 (Chrome 69) 是否支持 ECMAScript (ES6) 模块?

【问题讨论】:

  • 您在主进程或渲染器进程中使用导入语法吗?
  • Mayank:感谢您的链接。我想避免在 Electron 中使用 Babel 或其他转译器,因为它只使用一种浏览器技术(Chrome/V8)。
  • @ghybs:我正在尝试在渲染器进程中导入。当然,受支持的 ES6 语言功能应该可以在任何地方工作,主进程、渲染器、工作进程?

标签: google-chrome electron es6-modules


【解决方案1】:

Chrome 显然已经支持它们 Chrome 63:

https://caniuse.com/#feat=es6-module-dynamic-import

这可能意味着您可以在前端使用它们?

但节点 v11.11.0 似乎只支持它们带有一个额外的标志,--experimental-modules

https://nodejs.org/api/esm.html

我找不到参考,但也许节点 10.11.0 是相同的,这将使它们也可以在 Electron 后端工作?

(抱歉,我还在使用旧款 Electron,并且很乐意使用老式的 require(),因此无法根据个人经验告诉你它是否可行。)

【讨论】:

  • 谢谢达伦。是的,我放弃了导入并恢复为 require()。它有效,但我认为现在将支持导入(ES6 = 2015),我一定做错了什么......
【解决方案2】:

您的<script> 标记上肯定缺少type="module" 属性。

然后你会遇到文件协议问题,你可以通过注册自己的协议来解决这个问题,如Electron ES6 module import中所述

【讨论】:

  • 不,因为 HTML 没有使用
  • 是的,情况完全一样。因此,您正在混合 require 和 import (顺便说一句,您在问题中从未提及)?如果没有设置type="module" 属性,则导入语法“一直向下”无效。
  • 没有。我没有混合需要和导入。我需要 CommonJS 模块并导入 ES6 模块。 CommonJS 方法有效,ES6 方法无效。
猜你喜欢
  • 1970-01-01
  • 2014-09-30
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多