背景

起因是产品的需求,需要更换Electron为底层平台,但因为会有不少定制化的功能要实现,必须自己实现此类内容,所以也就导致必须自己编译Electron的源代码。

整个构建过程,看Electron的构建文档就行了:https://github.com/electron/i18n/blob/master/content/zh-CN/docs/development/build-instructions-gn.md

不过在构建Electron的过程中,出现了很多问题。

一、拉取不了chromium代码。

这个问题大家都懂的,需要翻墙才拉得了代码。这里需要注意了,整个构建代码大约有20几G,得留意工具的套餐有没有这么多流量。

另外,一般来讲我们是用终端命令行拉代码,然而终端的请求是不会经过翻墙工具的,所以需要设代理。

例如我的小飞机是这么设的:

export http_proxy=http://127.0.0.1:1087;
export https_proxy=http://127.0.0.1:1087;

二、拉了好久都没拉完。

一开始我是在宿舍拉代码的,但用了一天一夜,都还没有拉完,而终端的日志也让人奔溃。

[7:52:44] Still working on:
[7:52:44] src

后来感觉是因为宿舍的网速太慢,于是到公司去拉,约4个半小时就拉好!

[4:20:04] Still working on:
[4:20:04] src/v8
Syncing projects: 100% (95/95), done.

所以,网速很重要!!!

三、拉不下来,报错了。

在公司拉代码时,第一次遇到报错,拉取失败。

[1:30:24] error: RPC failed; curl 18 transfer closed with outstanding read data remaining
[1:30:24] fatal: The remote end hung up unexpectedly
[1:30:24] fatal: early EOF
[1:30:24] fatal: index-pack failed

查询资料说是git的 http.postBuffer 这个参数太小,会导致大文件拉不下来。

于是设置了:

git config --global http.postBuffer 999M

这么设置后,就正常拉完了!!!也就是第二次成功了。

四、还是拉不下来。

磁盘空间不足,也会导致代码拉取失败的!

整体代码拉下来,大概是30几G,另外编译代码生成的中间代码也会有30几G,所以要保证当前磁盘空间至少有70多G(一般128G的Mac就不用想编译这东西了)。

五、编译出错。

__main__.SdkError: 'Install Xcode, launch it, accept the license agreement, and run `sudo xcode-select -s /path/to/Xcode.app` to continue.'

这个错误,其实它说得很清楚,按提示处理就行。

sudo xcode-select -s /Applications/Xcode.app

总结

在整个构建过程中,问题主要是拉取代码和编译两方面。拉取代码保证网速、稍大的磁盘容量和Git http.postBuffer参数基本就没什么问题,而编译过程中的问题,按错误日志处理也就可以解决!

构建Electron的常见问题(Mac)的更多相关文章

  1. 如何开发Vite3插件构建Electron开发环境

    新用户购买<Electron + Vue 3 桌面应用开发>,加小册专属微信群,参与群抽奖,送<深入浅出Electron>.<Electron实战>作者签名版. 1 ...

  2. Electron 项目在 Mac 下复制和粘贴快捷键失效的解决办法

    公司的一个项目需要开发跨平台,由于整个项目完全由我一个人开发,本人也是初次接触 Electron,开发过程中遇到了不少坑,同样的代码 Windows 下复制和粘贴没有问题,Mac 下复制和粘贴失效,在 ...

  3. 如何使用JavaScript UI控件(WijmoJS)构建Electron应用程序

    概述 What is Electron? Electron是一个使用JavaScript.HTML和CSS构建跨平台桌面应用程序的框架. 您可以将Electron与纯JavaScript或您选择的Ja ...

  4. electron Windows和mac 的菜单栏隐藏

    1.Windows隐藏方法 const {electron,Menu,debug} = require('electron'); Menu.setApplicationMenu(null) 2.mac ...

  5. electron --- 构建桌面应用

    最近无意间看到了electron和nw的相关信息,感到很惊讶,因为学习前端也有一段时间了,竟然发现js还有这么强大的功能,因为js不仅可以写网页.写webapp.写hybrid,以及前不久出现的小程序 ...

  6. 从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(一)

    摘要:随着前端技术的飞速发展,越来越多的技术领域开始被前端工程师踏足.从NodeJs问世至今,各种前端工具脚手架.服务端框架层出不穷,“全栈工程师”对于前端开发者来说,再也不只是说说而已.在NodeJ ...

  7. 基于electron+vue+element构建项目模板之【打包篇】

    1.概述 开发平台OS:windows 开发平台IDE:vs code 本项目使用了一款Vue-CLI插件(vue-cli-plugin-electron-builder) 来构建 electron ...

  8. 使用 AngularJS 和 Electron 构建桌面应用

    GitHub 的 Electron 框架(以前叫做 Atom Shell)允许你使用 HTML, CSS 和 JavaScript 编写跨平台的桌面应用.它是io.js 运行时的衍生,专注于桌面应用而 ...

  9. AngularJS 和 Electron 构建桌面应用

    译]使用 AngularJS 和 Electron 构建桌面应用 原文: Creating Desktop Applications With AngularJS and GitHub Electro ...

随机推荐

  1. SpringBoot整合freemarker模板

    一.目录展示 二.导入依赖 三.application.properties配置文件 四.在src/main/resource/templates文件夹中创建HelloFreeMarker.ftl文件 ...

  2. SQL 数字转为中文大写

    USE [SPECIAL_BLD]GO SET ANSI_NULLS ONGO SET QUOTED_IDENTIFIER ONGO CREATE FUNCTION [dbo].[get_upper] ...

  3. CSS 3D图片翻转 ——3D Flipping Effect

    效果: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  4. iOS 自定义TabBarController

    转自:http://blog.csdn.net/xn4545945/article/details/35994863 一.自定义的思路 iOS中的TabBarController确实已经很强大了,大部 ...

  5. go基础之并发

    1.Goroutines是轻量级线程 2.channels的同步通信 1.Goroutines是轻量级线程 go语句在单独的线程中运行一个函数. 你可以使用go语句启动一个新的执行线程,即一个goro ...

  6. jQuery中的属性选择器

    先看代码,后面详细解释: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. 基于iCamera测试mt9m034 1280X960 高动态相机模块小结

    基于iCamera测试mt9m034 高动态相机模块小结 首先看看此模块的特性 mt9m034 高动态 CMOS模块 1280*960像素 5.48 V/lux-sec >115db 摄像头模块 ...

  8. 从RTL视图到Verilog语言-转可乐豆原创

    从RTL视图到Verilog语言 曾经听过某位大牛都说:“当你的学习FPGA到一个境界的时候,你看到的硬件描述语言,将不再是单纯的语言,而是由一个个逻辑门组成的电路图,一旦达到这个境界,方能把代码写到 ...

  9. Python3 类与对象之王者荣耀对战小游戏

    王者荣耀对战小游戏 # 定义英雄: 亚瑟 class Arthur: hero_type = 'Tank' def __init__(self, attack_value=164, armor=98, ...

  10. 计算密集型和 io 密集型项目的使用场景分析和代码演示

    from threading import Thread from multiprocessing import Process import time 计算密集型 def work1(): res= ...