2

文章内容记录一下最近在开发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中即可,可以采用这两种方法:

  1. electron-builder的配置文件中保留主进程需要的包
  2. 可以给主进程单独一个依赖环境,创建一个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命令可能会失败,需要

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 ... 在子进程无法获取。
image.png

在linux中打的包无法在windows运行

https://juejin.cn/post/7235908012673630245


chshihang
116 声望13 粉丝