Angular+Electron应用程序:根据桌面或web模式查询web API或数据库



我想使用Angular+Electron构建一个应用程序。我的应用程序应该能够在桌面和浏览器平台上运行。我正在考虑使用角形电子启动器套件(但我对其他可能性持开放态度)。

我关心的是我读写数据的方式。数据必须存储在MySQL数据库中。理想情况下,我想:

  • 当应用程序不在Electron上运行时(浏览器模式),使其调用api
  • 使应用程序在Electron上运行时直接查询mysql数据库(桌面模式)

我知道我可以检查window && window.process && window.process.type,让应用程序了解是否在Electron上运行,但我有点担心如何处理。也因为我可能需要导入像mysqljs这样的节点包,但只能在桌面模式下导入。

您可以在构建过程中简单地在Angular中传递不同的环境文件,这样您就可以控制环境变量,从而判断它是web应用程序构建还是电子应用程序构建。

https://angular.io/guide/build

额外

但是,如果你正在导入二进制包,这就是它变得棘手的地方。我不认为有一个干净的方法为你做有条件的进口。我没能找到一种干净的方法,并为我所有需要导入二进制文件的服务维护了另一个存储库。

要导入二进制文件,你还需要编辑一些webpack设置,告诉angular在构建过程中不要编译/包含二进制文件,这样你就可以使用像mysqljs这样需要二进制文件的库。电子端也有一些设置,可以使二进制文件兼容不同的平台,如Windows、Mac、Linux。基本上,做这件事真的很痛苦。

链接到如何编辑angular 7+的webpack设置

https://github.com/manfredsteyer/ngx-build-plus

我完全建议你不要这样做,除非你真的有充分的理由需要使用这些库。

编辑10/1/19

好吧,我指的是MySqlJs,但它似乎没有本地模块模块。本机/二进制模块基本上意味着依赖于c++编译的二进制文件的javascript代码(或者任何像rust…这样的本机语言)

在我的案例中,我使用的是grpc模块,它具有本机依赖性。最后不得不切换到grpc网络。

如果你需要的话,我会在这里添加一些脚注

https://electronjs.org/docs/tutorial/using-native-node-modules

Node.js/npm-无论如何都可以判断一个包是否是纯js?

最新更新