gpt4 book ai didi

javascript - 通过 "require"函数将菜单导入浏览器窗口

转载 作者:行者123 更新时间:2023-12-03 12:32:45 25 4
gpt4 key购买 nike

我正在关注 this tutorial 进行 Electron 演示.
只是想知道 require 代码行中发生了什么。
./menu/mainmenu.js 定义菜单项。

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

const template = [
{
label: 'Edit',
submenu: [
{
role: 'undo'
},
{
role: 'redo'
},
{
type: 'separator'
},
{
role: 'cut'
},
{
role: 'copy'
},
{
role: 'paste'
},
{
role: 'pasteandmatchstyle'
},
{
role: 'delete'
},
{
role: 'selectall'
}
]
}
]

const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
main.js
const { app, BrowserWindow, ipcMain } = require('electron');
let win;

function createWindow () {
win = new BrowserWindow({
width: 880,
height: 660,
webPreferences: {
nodeIntegration: true
}
})
// and load the index.html of the app.
win.loadFile('index.html')

require('./menu/mainmenu') //does this line copied the whole mainmenu.js file?
}
require('./menu/mainmenu')将整个文件复制到 main.js ?
还是导入了一些模块?在 mainmenu.js 文件中没有 export关键词。
根据 node.js documentation ,
“require 的基本功能是读取一个 JavaScript 文件,执行该文件,然后继续返回导出对象。”

最佳答案

require这里不复制文件(与 c++ #include 不同)
相反,它执行文件并返回导出的项目(如果有)

由于没有export'./menu/mainmenu'当您调用 require ,它只是执行了那个文件。
这种方法的问题是require只会处理该文件一次 *,正确的方法实际上是导出可以多次使用的东西。

例子:./menu/mainmenu.js

//...
const menu = Menu.buildFromTemplate(template)
export default ()=>Menu.setApplicationMenu(menu)
main.js
const { app, BrowserWindow, ipcMain } = require('electron');

let win;

function createWindow () {
//...

const setmenu = require('./menu/mainmenu') // you can put this at top, too
setmenu();

// or you can execute it inline
// require('./menu/mainmenu')()
}
注意:您可能需要 https://www.npmjs.com/package/babel-plugin-add-module-exports或一些解决方法来制作 requiredefault export一起工作。

*这个问题是你不能真的每次都依赖它来工作,例如从 A -> B -> A 更改菜单,第二个 require('A')会默默地什么都不做。

关于javascript - 通过 "require"函数将菜单导入浏览器窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64096859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com