无法在mac os电子菜单上覆盖应用名称

时间:2017-01-09 15:16:15

标签: electron

我正撞在墙上撞到墙上。我试图覆盖演示电子应用的名称,为其提供自定义名称,而不仅仅是Electron。我创建了一个模块来执行此操作:

const {app, Menu} = require('electron')

const template = [
    {
        label: 'New Name',
        submenu:[
            {
                label: 'Test',
                click: (menuItem, browserWindow, event) => {
                    console.log('menu item clicked')
                }
            },
            {role: 'quit'}
        ]
    },
    {
        label: 'test test',
        submenu:[
            {
                label: 'Test',
                click: (menuItem, browserWindow, event) => {
                    console.log('menu item clicked')
                }
            },
            {role: 'quit'}
        ]
    }
]

installApplicationMenu = function (){
    const menu = Menu.buildFromTemplate(template)
    let result = Menu.setApplicationMenu(menu)
}


module.exports = {
    installApplicationMenu
}

我在创建窗口后调用此模块:

const {app, BrowserWindow} = require('electron')
const path = require('path')
const url = require('url')

const {installApplicationMenu} = require('./MenuInstaller')


require('electron-reload')(__dirname,{
    electron: path.join(__dirname, 'node_modules', '.bin', 'electron')
})

let win


function createWindow(){
    win = new BrowserWindow({
        width: 800,
        height: 600
    })

    win.loadURL(
        url.format({
            pathname: path.join(__dirname, 'index.html'),
            protocol: 'file:',
            slashes: true
        })
    )

    win.on('closed', () => {
        win = null
    })

}

app.on('ready', function (){
    createWindow()
    installApplicationMenu()
})


app.on('activate', () => {
    if(win === null) createWindow()
})

当我这样做时,第二个菜单集的自定义名称为test test,但主菜单名称仍为Electron

screenshot of menus not set

我一直在将代码与我创建的其他应用程序进行比较,在那里我可以覆盖默认名称,而我无法发现在这种情况下保持覆盖的工作原理。

有什么想法吗?

2 个答案:

答案 0 :(得分:19)

使用;

在开发环境中运行应用程序时
./node_modules/.bin/electron main.js

electron main.js

您实际上正在运行预构建的 electron可执行文件,该文件运行您指定的文件。因此,在这种情况下,操作系统将显示构建和打包应用程序的名称。

如果您想更改它,您需要打包它。即构建自己的可分发包。要做到这一点,有一个很棒的包electron-builder

所以安装它;

npm install --save-dev electron-builder

然后构建包;

./node_modules/.bin/build -m
  

不要忘记在productName中设置package.json。例如,它将在macOS的菜单中显示。

     

-m适用于macOS。

您将在/dist目录中看到包。但是,如果您有自定义应用程序格式,则可能无法构建,因此请参阅READMEwiki以获取有关应用程序结构的详细信息。

答案 1 :(得分:4)

我近两年没有使用它后才回到Electron。根据我的记忆,除非打包应用程序,否则您无法更改应用名称。试试像这个电子包装工具:https://github.com/electron-userland/electron-packager