电子封装后不支持ES6

Yai*_*vet 6 javascript node.js ecmascript-6 reactjs electron

我在基于Electron的应用程序中使用各种ES6语法(例如import等)和React代码(JSX).在开发过程中,我正在使用电子预编译包(作为dev依赖项)以支持这些新功能,并且它可以完美地运行而没有任何错误.

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

Unexpected token import
Run Code Online (Sandbox Code Playgroud)

这就是我运行electron-packager命令的方法(通知平台和架构标志):

electron-packager . MyCoolApp --platform=linux --arch=x64
Run Code Online (Sandbox Code Playgroud)

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

Yai*_*vet 3

解决了。

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

electron-packager . MyCoolApp --platform=linux --arch=x64 --no-prune
Run Code Online (Sandbox Code Playgroud)

此外,我必须引入一个新脚本(让我们将其命名为:)es6-init.js来初始化主应用程序的脚本,以便在渲染之前“编译”代码(它应该用作应用程序的主要入口点脚本):

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

require('electron-compile').init(appRoot, require.resolve('./main'));
Run Code Online (Sandbox Code Playgroud)

参考:

  • FWIW,“devDependency”严格适用于开发而非生产所需的依赖项。消除这种分离并不是一个好主意。相反,我建议将其从“devDependency”移至“dependency”,以标记其在构建中的真正用途。 (2认同)