文章内容记录一下最近在开发Electron应用时遇到的一些问题,最后开发时使用的是maximegris的模板项目,在这个基础上进行的修改。
打包
项目打包使用的是electron-builder,在打包时可能会遇到有关打包体积太大的问题,原因是因为在打包时把node_modules
也打包进去了;
实际上angular
在运行ng build
生成的内容已经整合了所需要的包,所以对于angular
项目来说已经不需要node_modules
了。
如果将node_modules
排除,在打完包启动之后就会出现can't find xx module
的类似错误,这是因为主进程中也依赖一些包,但主进程的包不会整合,而是仍然直接引用node_modules中的内容,但node_modules中的内容已经被排除了。
所以只需要保证主进程需要的包仍然在node_modules中即可,可以采用这两种方法:
- electron-builder的配置文件中保留主进程需要的包
- 可以给主进程单独一个依赖环境,创建一个
package.json
文件,对于主进程需要的依赖项,添加到该文件即可,而主进程不需要的就只需要添加到angular
对应的package.json
。
第一种方法在尝试的时候并没有成功。
第二种方法对应目录结构如下,其中app
为主进程内容,依赖项对应app/package.json
;src为angular项目内容,依赖项对应根目录的package.json
| .npmrc
| angular.json
| angular.webpack.js
| electron-builder.json
| LICENSE.md
| package-lock.json
| package.json
| README.md
| tsconfig.json
| tsconfig.serve.json
+---app
| main.ts
| package-lock.json
| package.json
\---src
| favicon.ico
| index.html
| karma.conf.js
| main.ts
| polyfills-test.ts
| polyfills.ts
| styles.scss
| test.ts
| tsconfig.app.json
| tsconfig.spec.json
| typings.d.ts
+---app
+---assets
+---environments
相关环境变量设置
可以在.npmrc
文件中添加:
registry=https://registry.npmmirror.com
ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/
ELECTRON_BUILDER_BINARIES_MIRROR=https://npm.taobao.org/mirrors/electron-builder-binaries/
三个环境变量分别用来设置
- npm国内淘宝镜像源
- Electron二进制文件安装源(在安装过程中,electron 模块会通过 electron-download 为您的平台下载 Electron 的预编译二进制文件)
- 解决 nsis、winCodeSign 下载慢
Electron_MIRROR
ELECTRON_BUILDER_BINARIES_MIRROR
引入sqlite数据库
项目中只有主进程需要用到sqlite3
数据库,所以只需要把依赖添加到app/package.json
即可。
安装完成之后需要对源码进行编译。app
目录下运行:
npm install sqlite3 @electron/rebuild
./node_modules/.bin/electron-rebuild -f -w sqlite3
在windows环境安装sqlite3或者运行rebuild命令可能会失败,需要
- 配置python3环境
安装Visual Studio(需要包含Desktop development with C++)
可参考:
node 下 sqlite3 的使用
electron-rebuild 失败
引入 typeorm
typeorm
同样也只需要在主进程中使用。
app
目录下安装依赖:
npm install typeorm reflect-metadata
在入口文件(主进程文件)中添加
// 放在引入typeorm相关内容之前
import "reflect-metadata"
还需要在tsconfig.json
文件的compilerOptions
中添加
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
Typeorm文档中的# Installation
渲染器进程无法与数据库建立连接
node的一些核心模块,fs ... 在子进程无法获取。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。