当前位置: 首页 > news >正文

Electron如何打包使其支持龙芯和方腾、兆芯平台的麒麟系统

electron 支持在Windows平台打包成linux版本,但是编译成deb或者rpm需要在对应的平台上。如:deb需要在银河麒麟上打包,rpm需要在中标麒麟上打包。

1、构建和编译在win10上开发和编译:我选择electron vue框架开发,集成electron-packager打包工具,自己又扩展了package.json electron vue框架自带的 electron v2.0.18。

"build:linux": "cross-env BUILD_TARGET=linux node .electron-vue/build.js",
"build:arm64": "cross-env BUILD_TARGET=linux arch=arm64 node .electron-vue/build.js",
"build:ky64": "cross-env BUILD_TARGET=linux arch=x64 node .electron-vue/build.js",
"build:mips": "cross-env BUILD_TARGET=linux arch=mips64el node .electron-vue/build.js",

打包成Linux、arm、x64、amd64直接运行 npm run build 即可。兆芯对应x64、方腾对应Arm,龙芯对应mips,唯独mips electron官方支持到1.8版本,所以想要高版本需要自行编译或者到龙芯开源社区下载:http://www.loongnix.org/index.php/Electron

打包成龙芯注意事项

1、下载龙芯官方编译版本2、修改本地node库代码支持修改方法可以参考electron在龙芯平台上本地安装使用和打包(二)_tatooine_robot的博客-CSDN博客

2、编译操作步骤:

  1. 1、下载对应龙芯编译版 Electron-v10.1.0 我下载的是 麒麟版electron_v10.1.0_kylin_v10.tar.gzhttp://ftp.loongnix.org/os/loongnix/1.0/electron/electron/electron-v10.1.0/
  1. 2、将下载的 electron_v10.1.0_kylin_v10.tar.gz 文件解压缩后压缩成zip文件,命名electron-v2.0.18-linux-mips64el.zip,然后复制到 C:\Users\Administrator\AppData\Local\electron\Cache 目录中 备用
  1. 3、修改本地库文件支持

将node_modules\electron\install.js中

download({
    cache: process.env.electron_config_cache,
    version: version,
    platform: process.env.npm_config_platform,
    arch: process.env.npm_config_arch,
    strictSSL: process.env.npm_config_strict_ssl === \'true\',
    force: process.env.force_no_cache === \'true\',
    quiet: process.env.npm_config_loglevel === \'silent\' || process.env.CI,
    mirror
  }, extractFile)

修改为

if(arch.indexOf(\'mips\')>-1){
  extractFile(0, \'electron-v2.0.18-linux-mips64el.zip\');
}else{
  // downloads if not cached
  download({
    cache: process.env.electron_config_cache,
    version: version,
    platform: process.env.npm_config_platform,
    arch: process.env.npm_config_arch,
    strictSSL: process.env.npm_config_strict_ssl === \'true\',
    force: process.env.force_no_cache === \'true\',
    quiet: process.env.npm_config_loglevel === \'silent\' || process.env.CI,
    mirror
  }, extractFile)
}

目的是用自行打包的zip来替代去官方下载,导致404错误修改node_modules/electron-packager/targets.js

const linuxArchBuildVersions = {
  arm64: \'>= 1.8.0\',
  mips64el: \'^1.8.2-beta.5\'
}

改成

const linuxArchBuildVersions = {
  arm64: \'>= 1.8.0\',
  mips64el: \'>=1.8.2-beta.5\'
}

目的是跳过版本比较限制

修改node_modules/electron-packager/node_modules/sumchecker/index.js

找到

validate (baseDir, filesToCheck) {
    if (typeof filesToCheck === \'string\') {
      filesToCheck = [filesToCheck]
    }

    return this.readFile(this.checksumFilename, false)
      .then(this.parseChecksumFile.bind(this))
      .then(() => {
        return this.validateFiles(baseDir, filesToCheck)
      })
  }

改为:

validate (baseDir, filesToCheck) {
    if (typeof filesToCheck === \'string\') {
      filesToCheck = [filesToCheck]
    }

    return this.readFile(this.checksumFilename, false)
      .then(this.parseChecksumFile.bind(this))
      .then(() => {
        return new Promise((resolve, reject) => {
          resolve()
        });
        //return this.validateFiles(baseDir, filesToCheck)
      })
  }

目的是阻止验证SHASUM

那么接下来就可以直接运行 npm run build:mips

正常输出如下

$ npm run build:mips
> proclient@1.0.6 build:mips D:\Codes\kylinApp\ProClient
> cross-env BUILD_TARGET=linux arch=mips64el node .electron-vue/build.js
lets-build
√ building main process
√ building renderer process
Hash: 878d88ac655c5b098995
Version: webpack 4.42.0
Time: 1198ms
Built at: 2021/01/27 上午11:14:25
Asset      Size  Chunks             Chunk Names
main.js  2.14 KiB       0  [emitted]  main
Entrypoint main = main.js
[0] external "path" 42 bytes {0} [built]
[1] ./src/main/index.js 2.24 KiB {0} [built]
[2] external "electron" 42 bytes {0} [built]
[3] external "fs" 42 bytes {0} [built]
Hash: 74b85b3bed5fd09ee591
Version: webpack 4.42.0
Time: 13174ms
Built at: 2021/01/27 上午11:14:37
Asset       Size  Chunks             Chunk Names
1.js   10.5 KiB    1, 3  [emitted]
10.js   1.41 KiB      10  [emitted]
11.js    8.5 KiB      11  [emitted]
12.js  297 bytes      12  [emitted]
13.js  252 bytes      13  [emitted]
2.js   6.66 KiB    2, 4  [emitted]
3.js   6.93 KiB       3  [emitted]
4.js   1.93 KiB       4  [emitted]
5.js   7.89 KiB       5  [emitted]
6.js   1.81 KiB       6  [emitted]
7.js   5.54 KiB       7  [emitted]
8.js   6.48 KiB       8  [emitted]
9.js   6.01 KiB       9  [emitted]
fonts/MaterialIcons-Regular--css.eot    140 KiB          [emitted]
fonts/MaterialIcons-Regular--css.ttf    125 KiB          [emitted]
fonts/MaterialIcons-Regular--css.woff   56.3 KiB          [emitted]
fonts/MaterialIcons-Regular--css.woff2   43.3 KiB          [emitted]
imgs/bg1--img.png    116 KiB          [emitted]
imgs/bg15--img.png   40.3 KiB          [emitted]
imgs/logo--assets.png   45.5 KiB          [emitted]
index.html  782 bytes          [emitted]
renderer.js    483 KiB       0  [emitted]  renderer
static/CryptoHelper.dll      8 KiB          [emitted]
static/JmrhDesWin.exe   22.5 KiB          [emitted]
static/iconfont.css   19.8 KiB          [emitted]
static/iconfont.svg    126 KiB          [emitted]
static/iconfont.ttf   24.8 KiB          [emitted]
static/img/0.png   28.7 KiB          [emitted]
static/img/00225131827.png     39 KiB          [emitted]
static/img/1.jpg   21.2 KiB          [emitted]
static/img/1.png   22.2 KiB          [emitted]
static/img/404.png     51 KiB          [emitted]
static/img/bg.jpg    236 KiB          [emitted]
static/img/bg1.png    116 KiB          [emitted]
static/img/bg15.png   40.3 KiB          [emitted]
static/img/dbg_1.png    233 KiB          [emitted]
static/img/dbg_2.png   3.03 KiB          [emitted]
static/img/in_top_bj.jpg   55.5 KiB          [emitted]
static/img/login/SignBG.jpg   3.52 KiB          [emitted]
static/img/login/Signin.jpg   6.93 KiB          [emitted]
static/img/login/logo.jpg   37.3 KiB          [emitted]
static/img/login/register.jpg   5.01 KiB          [emitted]
static/img/login/topbg.jpg   2.16 KiB          [emitted]
static/img/logo.png   45.5 KiB          [emitted]
static/img/nostar.png    9.4 KiB          [emitted]
static/img/star.png   1.33 KiB          [emitted]
static/img/type_0.jpg   24.8 KiB          [emitted]
static/img/type_1.jpg   43.2 KiB          [emitted]
static/img/type_2.jpg   26.9 KiB          [emitted]
static/img/type_3.png    101 KiB          [emitted]
static/img/type_4.jpg   52.7 KiB          [emitted]
static/img/user.jpg   2.04 KiB          [emitted]
static/index.css    5.1 KiB          [emitted]
static/lib/gz_address_v4.js   9.64 KiB          [emitted]
static/print.css   2.95 KiB          [emitted]
static/reset.css   2.62 KiB          [emitted]
static/reset.less   4.47 KiB          [emitted]
static/user/91520223587250761K/1600324392672.jpg   72.4 KiB          [emitted]
static/user/91520223587250761K/data.json   13.8 KiB          [emitted]
Entrypoint renderer = renderer.js
[1] ./src/renderer/common.js 5.13 KiB {0} [built]
[2] ./node_modules/vue/dist/vue.esm.js 319 KiB {0} [built]
[5] ./src/renderer/store/index.js + 3 modules 21.1 KiB {0} [built]
| ./src/renderer/store/index.js 260 bytes [built]
| ./src/renderer/store/modules/comm_store.js 17.4 KiB [built]
| ./src/renderer/store/modules/db_store.js 330 bytes [built]
| ./src/renderer/router/menu.js 2.99 KiB [built]
[11] ./src/renderer/assets/db.js 3.12 KiB {0} [built]
[15] external "squel" 42 bytes {0} [built]
[70] ./src/renderer/router/index.js 3.77 KiB {0} [built]
[72] external "axios" 42 bytes {0} [built]
[73] external "electron" 42 bytes {0} [built]
[86] external "vee-validate" 42 bytes {0} [built]
[87] ./src/renderer/components/sidebar/loading.vue + 4 modules 1.39 KiB {0} [built]
| ./src/renderer/components/sidebar/loading.vue 464 bytes [built]
| ./src/renderer/components/sidebar/loading.vue?vue&type=template&id=6716256a& 217 bytes [built]
| ./src/renderer/components/sidebar/loading.vue?vue&type=script&lang=js& 376 bytes [built]
| ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/renderer/components/sidebar/loading.vue?vue&type=template&id=6716256a& 293 bytes [built]
| ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/renderer/components/sidebar/loading.vue?vue&type=script&lang=js& 66 bytes [built]
[93] external "vue-i18n" 42 bytes {0} [built]
[116] external "muse-ui" 42 bytes {0} [built]
[117] ./node_modules/vee-validate/dist/locale/zh_CN.js 2.73 KiB {0} [built]
[118] external "vue-simple-uploader" 42 bytes {0} [built]
[222] ./src/renderer/main.js + 6 modules 10.9 KiB {0} [built]
| ./src/renderer/main.js 2.17 KiB [built]
| ./src/renderer/App.vue 446 bytes [built]
| ./src/renderer/common/js/mixin.js 7.22 KiB [built]
| ./src/renderer/App.vue?vue&type=template&id=2c2ecc9c& 201 bytes [built]
| ./src/renderer/App.vue?vue&type=script&lang=js& 344 bytes [built]
| ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/renderer/App.vue?vue&type=template&id=2c2ecc9c& 210 bytes [built]
| ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/renderer/App.vue?vue&type=script&lang=js& 204 bytes [built]
+ 244 hidden modules
Child html-webpack-plugin for "index.html":
Asset     Size  Chunks  Chunk Names
index.html  534 KiB       0
Entrypoint undefined = index.html
[0] ./node_modules/html-webpack-plugin/lib/loader.js!./src/index.ejs 2.08 KiB {0} [built]
[1] ./node_modules/lodash/lodash.js 528 KiB {0} [built]
[2] (webpack)/buildin/module.js 497 bytes {0} [built]
OKAY  take it away `electron-packager`
WARNING: The callback-based version of packager() is deprecated and will be removed in a future major version, please convert to the Promise version or use the nodeify module.
Packaging app for platform linux mips64el using electron v2.0.18
DONE

OK,electron编译完成

银河麒麟对应的输出应该是 proclient-linux-arm64,中标麒麟龙芯平台应该是proclient-linux-mips64el,注意区分。

3、打包接下来将编译好的 build\proclient-linux-arm64\ 文件夹ssh上传到对应的系统,这里使用银河麒麟操作,打包成deb文件。麒麟系统需具备nodejs环境、包含npm。首先运行

npm install -g electron-installer-debian

安装完成后,切换到proclient-linux-mips64el的上层文件夹,运行如下命令

electron-installer-debian –src proclient-linux-arm64/ –dest dist/installers/ –arch arm64

等待片刻就好,输出文件在 dist/installers 中。

中标麒麟平台使用的打包工具是

npm install -g electron-installer-redhat

同时中标麒麟还要具备 rpm-build、rpm工具环境

如果你本身就是在麒麟系统上做开发,那就更方便了。

直接集成打包命令到package.json

"rpm64": "electron-installer-redhat --src dist/app-linux-x64/ --dest dist/installers/ --arch x86_64"
"deb64": "electron-installer-debian --src dist/app-linux-x64/ --dest dist/installers/ --arch amd64"

两个命令就完事了

npm run build:arm64

npm run deb64

附上打包库地址:

NPM镜像-NPM下载地址-NPM安装教程-阿里巴巴开源镜像站NPM镜像-NPM下载地址-NPM安装教程-阿里巴巴开源镜像站

转自:Electron如何打包使其支持龙芯和方腾、兆芯平台的麒麟系统 - 大唐高僧 - 爱码网

相关文章:

  • X Window与Microsoft Windows的相同点和不同点
  • X Window
  • C语言的内存管理-堆、栈等
  • Python 自动化操作 Excel
  • Lambda表达式
  • spinlock 使用介绍
  • Spring事务(Transaction)
  • Ajax-hook 原理解析
  • JavaScript Array 对象
  • SOCKET句柄泄露带来的内存灾难
  • 浪潮服务器安装Windows Server 2008 R2蓝屏
  • Linux服务器安装Windows虚拟机
  • AD域的详细介绍
  • 网络连接的三种模式:桥接模式,NAT模式,仅主机模式
  • 蓝牙怎么区分单模和双模_双十二无线外设怎么选,手把手教你选购无线外设圆梦无线桌面...
  • [nginx文档翻译系列] 控制nginx
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • Docker: 容器互访的三种方式
  • export和import的用法总结
  • gcc介绍及安装
  • JavaScript设计模式与开发实践系列之策略模式
  • LeetCode29.两数相除 JavaScript
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • maya建模与骨骼动画快速实现人工鱼
  • Python 反序列化安全问题(二)
  • React-生命周期杂记
  • v-if和v-for连用出现的问题
  • webpack入门学习手记(二)
  • 订阅Forge Viewer所有的事件
  • 多线程 start 和 run 方法到底有什么区别?
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 聊聊directory traversal attack
  • 前端面试之闭包
  • 微服务入门【系列视频课程】
  • 微信公众号开发小记——5.python微信红包
  • 我从编程教室毕业
  • MPAndroidChart 教程:Y轴 YAxis
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​ArcGIS Pro 如何批量删除字段
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​水经微图Web1.5.0版即将上线
  • (30)数组元素和与数字和的绝对差
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (九十四)函数和二维数组
  • (力扣)循环队列的实现与详解(C语言)
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十八)SpringBoot之发送QQ邮件
  • (十一)c52学习之旅-动态数码管
  • (未解决)macOS matplotlib 中文是方框
  • (五)IO流之ByteArrayInput/OutputStream
  • .htaccess配置重写url引擎