我已经在 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 的本地/开发中正常运行