Electron 打包后不支持 ES6

Posted

技术标签:

【中文标题】Electron 打包后不支持 ES6【英文标题】:ES6 is not supported after Electron packaging 【发布时间】:2018-09-08 09:50:17 【问题描述】:

我在基于Electron 的应用程序中使用了各种ES6 syntax(例如import 等)和React 代码(JSX)。在开发过程中,我使用electron-prebuilt-compile 包(作为dev-dependency)来支持这些新功能,它运行良好,没有任何错误。

但是在使用 electron-packager 包打包我的应用程序并运行可分发的应用程序文件后,我遇到了不受支持的 ES6 相关错误,例如:

Unexpected token import

这就是我运行 electron-packager 命令的方式(注意平台和架构标志):

electron-packager . MyCoolApp --platform=linux --arch=x64

我的应用程序的打包/可分发版本不支持 ES6/React 功能的任何原因?

【问题讨论】:

我认为这是因为electron-packager 在您的 package.json 中未明确设置 electron 时会自行下载当前的 Electron 二进制文件(我假设,因为您使用的是 electron-prebuilt-compile)或当您不在要打包到的平台上时。 @AlexanderLeithner 如果将在我的 package.json 中明确设置电子,它应该可以正常工作吗? 【参考方案1】:

解决了。

事实证明 devDependencies 在默认情况下在打包过程中被省略,这意味着 electron-prebuild-compile 包对于打包的应用程序“不适用”,没有它 ES6 就不能转译。因此,为了停用此默认行为,我必须使用 --no-prune 标志调用打包程序命令,以便 devDependencies 将保留而不会被删除:

electron-packager . MyCoolApp --platform=linux --arch=x64 --no-prune

此外,为了在渲染之前“编译”代码(它应该用作主入口点脚本您的应用程序):

var appRoot = path.join(__dirname, '..');

require('electron-compile').init(appRoot, require.resolve('./main'));

参考资料:

https://github.com/electron-userland/electron-compile#how-does-it-work-slightly-harder-way https://github.com/electron-userland/electron-packager

【讨论】:

FWIW,devDependencies 严格用于那些您需要用于开发而非生产的依赖项。删除这种分离不是一个好主意。相反,我建议将其从 devDependencies 移至 dependencies 以标记其在您的构建中的真正目的。【参考方案2】:

Nodejs(还有 Electron)不支持 importexport。您需要使用require();

【讨论】:

使用 electron-prebuilt-compile 包,你应该能够运行具有 ES6 特性的 electron

以上是关于Electron 打包后不支持 ES6的主要内容,如果未能解决你的问题,请参考以下文章

jdk11后不支持webservice问题解决方案

webengineview支持es6吗

Electron打包后大小优化

Electron 应用打包

Windows 支持通过 Capacitor 创建的 Electron 应用程序

electron在win上可运行后,如何打包到linux上运行?