electron打包

打包环境

  • 系统银河麒麟sp1(其他linux皆可)
  • 系统架构arm64
  • 下载依赖
# 下载npm
sudo apt install npm
# 通过淘宝源下载cnpm
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org

打包

  • electron 官方提供相关的打包demo,可以通过 git clone https://github.com/electron-userland/electron-installer-debian.git 进行下载
  • 配置环境
# cnpm 下载较为稳定
sudo cnpm install -g electron
sudo cnpm install -g electron-packager
sudo cnpm install -g electron-installer-debian

cd electron-installer-debian
cnpm install --save-dev electron
cnpm install --save-dev electron-packager
cnpm install --save-dev electron-installer-debian
  • 可以通过 electron-packager 去构建deb包的目录节点
# app 程序名 --arch 系统架构  --out 输出目录
electron-packager . app --platform linux --arch arm64 --out dist/
  • 使用electron-packager 构建目录过慢或遇到长时间无反应或TIMEOUT等问题时,可以添加--download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/对其进行加速
electron-packager . app --platform linux --arch arm64 --out dist/ --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/
  • 生成的dist/目录结构如下
└── dist
    └── app-linux-arm64
        ├── LICENSE
        ├── LICENSES.chromium.html
        ├── content_shell.pak
        ├── app
        ├── icudtl.dat
        ├── libgcrypt.so.11
        ├── libnode.so
        ├── locales
        ├── natives_blob.bin
        ├── resources
        ├── snapshot_blob.bin
        └── version
  • 打deb包可以通过执行electron-installer-debian来实现
electron-installer-debian --src dist/app-linux-arm64/ --dest dist/installers/ --arch arm64
  • 完成以上操作后你会dist/installers/app_0.0.1_arm64.deb目录得到deb包

通过package.json脚本进行打包相关操作

  • 如果你想通过npm来执行electron相关操作,可以通过修改package.json文件来实现,用例如下
{
  "name": "app",
  "description": "An awesome app!",
  "version": "0.0.1",
  "scripts": {
    "start": "electron .",
    "build": "electron-packager . app --platform linux --arch arm64 --out dist/ --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/",
    "pack:kylin": "electron-installer-debian --src dist/app-linux-arm64/ --dest dist/installers/ --arch arm64"
  },
  "devDependencies": {
    "electron-installer-debian": "^0.6.0",
    "electron-packager": "^9.0.0",
    "electron": "~1.7.0"
  }
}
  • 此时执行npm run build 与 执行electron-packager . app --platform linux --arch arm64 --out dist/ --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/效果是一样的

asar加密相关

  • asar并非是一种加密方式,仅是一种压缩包的方法,可以通过asar extract xxx.asar 进行解缩
  • asar 是一种将多个文件合并成一个文件的类 tar 风格的归档格式。 Electron 可以无需解压整个文件,即可从其中读取任意文件内容
  • 参照如下步骤将你的应用打包成 asar归档文件
1. 安装 asar 实用程序
npm install -g asar
2. 使用 asar pack 打包
asar pack your-app app.asar
  • 使用 asar 档案文件,在 Electron 中有两类 APIs:Node.js 提供的 Node API 和 Chromium 提供的 Web API。 这两种 API 都支持从 asar 档案中读取文件。

asar加密依赖第三方库执行报错

  • 当你使用asar加密打报时,调用了第三方的so库,并且改库也在asar内,会有一下报错。
Error: libhello.so: cannot open shared object file: No such file or directory
    at process.func [as dlopen] (node:electron/js2c/asar_bundle:5:1800)
    at Object.Module._extensions..node (node:internal/modules/cjs/loader:1170:18)
    at Object.func [as .node] (node:electron/js2c/asar_bundle:5:2027)
    at Module.load (node:internal/modules/cjs/loader:982:32)
    at Module._load (node:internal/modules/cjs/loader:823:12)
    at Function.c._load (node:electron/js2c/asar_bundle:5:13331)
    at Module.require (node:internal/modules/cjs/loader:1006:19)
    at require (node:internal/modules/cjs/helpers:93:18)
    at new Log (/usr/lib/helloworld/resources/app.asar/packages/main/dist/index.js:1:301)
    at /usr/lib/helloworld/resources/app.asar/packages/main/dist/index.js:1:1228606 {
  code: 'ERR_DLOPEN_FAILED'
}
A JavaScript error occurred in the main process
Uncaught Exception:
TypeError: t is not a constructor
    at new Log (/usr/lib/helloworld/resources/app.asar/packages/main/dist/index.js:1:354)
    at /usr/lib/helloworld/resources/app.asar/packages/main/dist/index.js:1:1228606
    at /usr/lib/helloworld/resources/app.asar/packages/main/dist/index.js:1:1247263
    at Object.<anonymous> (/usr/lib/helloworld/resources/app.asar/packages/main/dist/index.js:1:1247267)
    at Module._compile (node:internal/modules/cjs/loader:1110:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1140:10)
    at Module.load (node:internal/modules/cjs/loader:982:32)
    at Module._load (node:internal/modules/cjs/loader:823:12)
    at Function.c._load (node:electron/js2c/asar_bundle:5:13331)
    at Object.<anonymous> (node:electron/js2c/browser_init:197:3197)

  • 该报错是因为asar生成asar归档文件后,其内部的so文件会识别成只读模式,无法加载与调用,解决该问题有两种方案

方案一

  • 在asar生成归档文件时使用--unpack参数,可以将制定文件夹的文件不归档在asar文件内,此时调用改so库不会存在此问题,使用如下
cd dist/app-linux-arm64/resources/
asar pack app app.asar asar pack app app.asar --unpack *.md
  • 运行命令后,您将会看到 app.asar.unpacked 文件夹与 app.asar 文件一起被创建了。 没有被打包的文件和 app.asar 会一起存档发布。
  • 随后运行程序时不会存在报错

方案二

  • 将so动态库修改为静态库,或者改为.node形式的第三方库,该代码可以参考https://github.com/belloyang/test_addon.git代码,具体操作如下
git clone https://github.com/belloyang/test_addon.git
cd test_addon && cnpm install 
  • 打包可自行联系,该damo会生成.node的动态库,可以被正常执行。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容