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

Chr*_*itz 8 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
}
Run Code Online (Sandbox Code Playgroud)

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

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()
})
Run Code Online (Sandbox Code Playgroud)

当我这样做时,第二个菜单集得到它的自定义名称,test test但主菜单名称仍然是Electron:

未设置菜单的屏幕截图

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

有任何想法吗?

Har*_*ria 27

在开发环境中运行应用程序时使用;

./node_modules/.bin/electron main.js
Run Code Online (Sandbox Code Playgroud)

要么

electron main.js
Run Code Online (Sandbox Code Playgroud)

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

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

所以安装它;

npm install --save-dev electron-builder
Run Code Online (Sandbox Code Playgroud)

然后构建包;

./node_modules/.bin/build -m
Run Code Online (Sandbox Code Playgroud)

不要忘了设置productNamepackage.json.例如,它将在macOS的菜单中显示.

-m 适用于macOS.

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


Tim*_*key 8

在将近 2 年没有使用 Electron 之后,我才重新开始使用它。据我所知,除非打包应用程序,否则无法更改应用程序名称。试试这个电子包装器:https : //github.com/electron-userland/electron-packager