Electron js Electron builder mac 构建在运行时打开空白屏幕,而在使用 npm start 运行时在开发中完美运行

2024-01-12

我已经在 Windows 和 ubuntu 中创建了内置应用程序,该应用程序运行正常。但是当在 mac 中构建时,构建已成功创建,但它只显示白色空白屏幕,没有渲染 html 页面。而当使用 npm start 运行时,它运行得很好。我只有 mac 构建有问题

下面是package.json

{
  "name": "collab",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "homepage": "someurl",
  "scripts": {
    "start": "electron .",
    "dist:linux": "electron-builder --linux",
    "dist:windows": "electron-builder --windows",
    "dist:mac": "electron-builder -m",
    "postinstall": "electron-builder install-app-deps",
    "package": "electron-packager . --production"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@slack/web-api": "^6.7.2",
    "auto-launch": "^5.0.5",
    "axios": "^0.27.2",
    "base64-img": "^1.0.4",
    "dotenv": "^16.0.1",
    "electron-log": "^4.4.8",
    "ext-ip": "^0.3.9",
    "geoip-lite": "^1.4.5",
    "geolib": "^3.3.3",
    "moment": "^2.29.3",
    "mongoose": "^5.13.2",
    "open": "^8.4.0",
    "screenshot-desktop": "^1.12.3",
    "socket.io-client": "^3.0.4",
    "sqlite3": "^5.1.2"
  },
  "devDependencies": {
    "@types/node": "^18.0.0",
    "electron": "^11.1.0",
    "electron-rebuild": "^3.2.9"
  },
  "build": {
    "appId": "collab",
    "linux": {
      "target": [
        "deb"
      ],
      "icon": "build/icons/icon_256x256.png",
      "category": "Utility"
    },
    "mac": {
      "target": "dmg",
      "icon": "build/icons/icon_512x512.png"
    },   
  }
}

我在 app.js 中使用的几个函数

app.whenReady().then(() => {
    connectivityCheck();
});
function connectivityCheck() {
    connectivityInterval = setInterval(function () {
        dns.resolve("www.google.com", function (err, addr) {
            if (err) {
                let reminder = new Notification({
                    title: 'Collab:Error',
                    body: 'No internet connectivity found'
                });
                reminder.show();
            } else {
                let reminder = new Notification({
                    title: 'Collab',
                    body: 'Internet connection found'
                });
                reminder.show();
                connectivityStatus = true;
                appReadyProcess();
            }
        });
    }, 10000);
}
function appReadyProcess() {
    setUpWindow().then(() => {
        askPermission().then(() => {
            if (connectivityStatus) {
                clearInterval(connectivityInterval);
                manageDBConnection();
            }
        });
    });
}
function manageDBConnection() {
    connectDB(process.env.MONGO_URI).then(() => {
        socket.emit("join-message", "hello");
        open(process.env.SERVER_URL + "/setLocation");
        loginScreen();
        verifyUserTimer();
    }).catch((err) => {
        appLogs.error(err);
    });
}

我在 method.js 文件中使用的几个函数

function setUpWindow() {
    return new Promise((resolve, reject) => {
        if (BrowserWindow.getAllWindows().length === 0) {
            window_app = new BrowserWindow({
                width: 500,
                height: 660,
                resizable: false,
                webPreferences: {
                    nodeIntegration: true,
                },
            });
            window_app.removeMenu();
            //window_app.webContents.openDevTools(); // Opening inspect elements    
            window_app.tray = new Tray(nativeImage.createEmpty());
            const menu = Menu.buildFromTemplate([
                {
                    label: "Actions", submenu: [
                        {
                            label: "Open Collab", click: (item, window, event) => {
                                window_app.show();
                            }
                        },
                    ]
                },
                { type: "separator" },
                {
                    label: 'Quit', click: function () {
                        window_app.removeAllListeners('close');
                        window_app.close();
                        app.quit();
                    }
                }
            ]);
            window_app.tray.setContextMenu(menu);
            window_app.icons = new BrowserWindow({
                show: false, webPreferences: { offscreen: true }
            });
            window_app.icons.loadURL("https://trends.google.com/trends/hottrends/visualize");
            window_app.icons.webContents.on("paint", (event, dirty, image) => {
                if (window_app.tray) window_app.tray.setImage(image.resize({ width: 16, height: 16 }));
            });
            window_app.on('close', (event) => {
                if (app.quitting) {
                    window_app = null
                } else {
                    event.preventDefault()
                    window_app.hide()
                }
            });
            resolve(true);
        }
    }).catch((err) => {
        logs.error(err);
    });
}
function askPermission() {
    return new Promise((resolve, reject) => {
        if (process.platform === 'darwin' || process.platform === 'win32') {
            systemPreferences.getMediaAccessStatus('screen');
            resolve(true);
        } else {
            resolve(true);
        }
    }).catch((err) => {
        logs.error(err);
    });
}
function loginScreen() {
    let login = false;
    new Promise((resolve, reject) => {
        db = new DBFuntions();
        query = "select * from user_data";
        db.getDetails(query).then((data) => {
            if (data.length === 0) { // || (Number(data[0].expire_token_date) < currentTs)
                login = true;
            }
            let filename;
            if (login) {
                filename = `file://${__dirname}/login.html`;
                window_app.loadURL(filename);
            } else {
                getUserByEmail(data[0].email).then((DBUser) => {
                    userDetails = DBUser;
                });
                filename = `file://${__dirname}/index.html`;
                window_app.loadURL(filename);
            }
            resolve(true);
        });
    }).catch((err) => {
        logs.error(err);
    });
}

当应用程序打开时,甚至应用程序图标和托盘图标也会正确显示。 它适用于 Windows 和 ubuntu,唯一的问题是 mac 构建。当使用 npm start app.js 运行时,它可以在 Mac 的本地/开发中正常运行


我能够通过使用日志来解决问题

const appLogs=require('electron-log');
appLogs.transports.console.level = false;

我能够从帮助我解决问题的日志中获取所需的详细信息。异常或错误是由其他原因生成的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Electron js Electron builder mac 构建在运行时打开空白屏幕,而在使用 npm start 运行时在开发中完美运行 的相关文章

随机推荐

  • PHP 中值对象的示例是什么?

    我读过很多值对象的 C 示例 并且我知道它是一个由其值标识的 对象 如果值发生变化 则该对象是 新的 然而 当涉及到 PHP 时 这似乎没有意义 要么是这样 要么我只是没有建立联系 值对象只是一个字符串吗 为了将这一点放在上下文中 在许多面
  • Java 8 中限制 groupBy

    如何按每个条目限制 groupBy 例如 基于这个例子 流分组依据 http www leveluplunch com java examples java util stream groupingBy example studentCla
  • 禁用 awt/swing 调试(精细)日志消息

    我正在使用 java 日志记录将应用程序的日志消息写入日志文件和其他目的地 将日志级别设置为FINE 我还从 AWT Swing 收到 不需要的 消息 例如 0 when grabbed 1 contains 2 和别的 查看 JDK 源代
  • Android - 如何隐藏/显示进度条onclick

    我试图在单击按钮时显示进度条 当我测试应用程序时 它强制关闭 停止 在添加进度条代码之前 我的应用程序运行良好 如果这很重要的话 我也使用切换按钮 并且我想要旋转的进度条而不是对话框 有什么帮助吗 这是我的代码 Override publi
  • CoffeeScript 类的范围

    我想在类属性中嵌套多个函数 如下所示 不幸的是 他们无法访问该类的主要范围 我可以在不传递每个嵌套函数引用的情况下解决这个问题吗this class myClass constructor gt errors doSomething gt
  • 使用 extjs4 重用自定义组件

    我在 JavaScript 文件中创建了一个自定义网格 我想将它用作单独 js 文件中不同面板的 xtype 如果我在单个面板上使用它 它工作得很好 但是当我尝试同时在不同的面板上使用它时 我在 chrome 开发人员工具控制台中收到错误消
  • UDID 或 IMEI——哪个更好?

    在开发需要我唯一识别电话用户的应用程序时 我希望得到一些关于最好使用手机的 UDID 还是 IMEI 的建议 使用两者有什么优点 缺点吗 所有评论将不胜感激 ANDROID ID 的优点 设置 安全 ANDROID ID 这是设备首次启动时
  • Spring RestTemplate 中未找到 HttpMessageConverter

    当我使用 Spring RestTemplate 检索 JSON 时出现错误 错误说 Could not extract response no suitable HttpMessageConverter found for respons
  • 如何在 VSCode 的默认主题中自定义 Python 的文档字符串颜色?

    有人可以向我解释一下如何在 VSCode 的默认主题中自定义 Python 的文档字符串颜色吗 我想通过用户设置来完成此操作 因为希望能够保存我的配置文件 我尝试使用 editor tokenColorCustomizations 但它会影
  • 自定义损失函数 Keras Tensorflow

    我需要一个自定义加权 MSE 损失函数 我在 keras backend 中定义了它 from keras import backend as K def weighted loss y true y pred return K mean
  • mvn 命令未被识别为内部或外部命令

    我正在得到mvn命令未被识别为内部或外部命令 我已经设置了 M2 HOME JAVA HOME 并将 M2 HOME bin 添加到路径变量中 都是系统变量 仍然遇到同样的问题 回显变量向我显示正确的路径 Maven 路径 C apache
  • 如何下载整个CRAN存储库?

    对于没有互联网的离线 Linux 机器来说 安装具有大量依赖项的 R 包是一场噩梦 我在 SE 中发现了几篇帖子 讨论如何创建本地文件夹 复制所需的包 zip 文件以及使用 install packages 进行安装 然而 查找 下载大量包
  • AngularJS:如何将数据从指令传递到控制器函数

    我正在尝试将一些数据从指令传递到函数中addTrackFromPicker在我的控制器中 scope addTrackFromPicker function message console log addTrackFromPicker me
  • 如何将成员函数指针传递给 std::function

    如何将成员函数指针传递给std function通过一个函数 我将通过比较来解释它 现场测试 http ideone com Xjxt0B template
  • 以编程方式设置 derby.system.home

    需要将 JavaDB derby db 文件的数据库和日志文件移动到部署目录中 数据库在应用程序启动目录中工作 因为 JavaDB 创建了一个名为数据库名称的文件夹 在我的例子中为 mydb 但我想将该目录移动到名为 data create
  • 在 C++ 中重新定义 template

    我一直在寻找解决我的问题的方法 但似乎找不到 我正在使用 Code Blocks 并且收到模板类的重新定义错误 这是我的 vectorAux h 文件 ifndef vectoraux h define vectoraux h includ
  • 更改控件使用的默认系统字体

    我有一个大应用程序 需要更改字体 但我不想触摸每个标签 文本字段等 如何访问 IB 和中使用的 systemFont UIFont systemFontOfSize x 我已经尝试过这个 iOS 5 对 UIAppearance 感到好奇
  • 有理由使用 is 与 as 吗? [复制]

    这个问题在这里已经有答案了 当考虑is versus as在 C 中 您可以使用任一类型来确认一种类型是否可以转换为另一种类型 using is Employee e new Manager if e is Manager var m Ma
  • JBoss EAP 6 配置单个服务器以在域模式下进行远程调试

    我有域控制器 一个主机控制器和一台服务器在同一台计算机上运行 我正在使用 IDEA 连接到远程服务器进行调试 但即使它正在运行代码 它也不会在断点处停止 我已经通过系统输出进行了验证 我已启用HOST CONTROLLER JAVA OPT
  • Electron js Electron builder mac 构建在运行时打开空白屏幕,而在使用 npm start 运行时在开发中完美运行

    我已经在 Windows 和 ubuntu 中创建了内置应用程序 该应用程序运行正常 但是当在 mac 中构建时 构建已成功创建 但它只显示白色空白屏幕 没有渲染 html 页面 而当使用 npm start 运行时 它运行得很好 我只有