我的main.js中的电子菜单代码现在很长。是否可以将其外包给另一个文件?如果可以,我是否仍然可以从菜单中调用位于main.js中的函数?
// MENU BEGIN
/////////////////////////////////////////////////////////////////////
const { app, Menu } = require('electron')
const isMac = process.platform === 'darwin'
const isWin = process.platform === 'win32'
const template = [
// { role: 'appMenu' }
...(isMac ? [{
label: app.name,
submenu: [
{ role: 'about' },
{ type: 'separator' },
{ role: 'services' },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideOthers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
]
}] : []),
// more menu code...
{
role: 'help',
submenu: [
{
label: 'Learn More',
click: async () => {
const { shell } = require('electron')
await shell.openExternal('https://github.com/aronsommer/eddy-g')
}
}
]
}
]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
/////////////////////////////////////////////////////////////////////
// MENU END
1条答案
按热度按时间n9vozmp41#
随着你的电子应用程序的增长,你必须开始把你的代码分离到它们自己的文件中。这就是所谓的分离你的关注点。它使一个整洁,易于阅读结构良好的项目。
将菜单的创建从
main.js
文件分离到它自己的文件中(我们称之为menu.js
),然后导出它的build()
函数。menu.js
(主线程)现在,在您的
main.js
文件中,像处理任何其他文件一样请求它,然后在应用程序为ready
时调用build()
函数。注意:我已经从
createWindow()
函数中调用了菜单build()
函数,因为它实际上是窗口创建的一部分。菜单是窗口的一部分。main.js
(主线程)关于您的问题“我还能从菜单中调用位于main.js中的函数吗?"。
答案是肯定的,如果你
require
那些函数在你的menu.js
文件的顶部。如果你不想从你的
menu.js
文件中require
所有这些函数,你可以要求节点的事件模块和菜单click
,emit
一个事件和监听它在你的其他脚本(s).这种设计允许一个非常模块化的应用程序,允许新功能添加在以后没有任何困难.奖金
在单独的文件中构建菜单还允许您在任何菜单项需要更改时动态更新(重新构建)菜单。
menu.js
(主线程)