通过 "require" 函数将菜单导入浏览器 window
import menu to browser window by "require" function
我正在按照 this tutorial.
进行电子演示
只是想知道 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
关键字。
“require 的基本功能是它读取 JavaScript 文件,执行文件,然后继续 return exports 对象。”
require
这里不会复制文件(不像 c++
#include)
而是执行文件和return导出的项目(如果有的话)
因为当您调用 require
时 './menu/mainmenu'
中没有 export
,它只是执行那个文件。
这种方法的问题是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 或一些变通方法才能使 require
和 default export
协同工作。
*这个问题是你不能真的每次都依赖它来工作,例如将菜单从 A -> B -> A 更改,第二个 require('A')
将静默 什么都不做。
我正在按照 this tutorial.
进行电子演示只是想知道 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
关键字。
“require 的基本功能是它读取 JavaScript 文件,执行文件,然后继续 return exports 对象。”
require
这里不会复制文件(不像 c++
#include)
而是执行文件和return导出的项目(如果有的话)
因为当您调用 require
时 './menu/mainmenu'
中没有 export
,它只是执行那个文件。
这种方法的问题是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 或一些变通方法才能使 require
和 default export
协同工作。
*这个问题是你不能真的每次都依赖它来工作,例如将菜单从 A -> B -> A 更改,第二个 require('A')
将静默 什么都不做。