Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过“导入”将菜单导入浏览器窗口;要求;功能_Javascript_Node.js_Electron_Commonjs - Fatal编程技术网

Javascript 通过“导入”将菜单导入浏览器窗口;要求;功能

Javascript 通过“导入”将菜单导入浏览器窗口;要求;功能,javascript,node.js,electron,commonjs,Javascript,Node.js,Electron,Commonjs,我正在做一个电子演示 只是想知道在require行代码中发生了什么 /menu/main menu.js定义菜单项 const {Menu} = require('electron') const electron = require('electron') const app = electron.app const template = [ { label: 'Edit', submenu: [ { role: 'undo' },

我正在做一个电子演示

只是想知道在require行代码中发生了什么

/menu/main menu.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?
}
是否需要('./menu/main menu')
将整个文件复制到
main.js

还是导入了一些模块?在main menu.js文件中没有
export
关键字

据报道,


“require的基本功能是读取JavaScript文件,执行该文件,然后返回exports对象。”

require
此处不复制文件(与
c++
\include不同)

相反,它执行文件并返回导出的项目(如果有)


由于在调用
require
时,
'./menu/main menu'
中没有
export
,因此它只执行该文件

这种方法的问题是
require
只处理该文件一次*,正确的方法实际上是导出可以多次使用的内容


例如:

/menu/main menu.js

//...
const menu = Menu.buildFromTemplate(template)
export default ()=>Menu.setApplicationMenu(menu)
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')()
}
main.js

//...
const menu = Menu.buildFromTemplate(template)
export default ()=>Menu.setApplicationMenu(menu)
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')()
}
注意:您可能需要或需要一些变通方法才能使
require
默认导出
协同工作



*问题是你不能每次都依赖它来工作,例如A->B->A中的“更改”菜单,第二个
require('A')
将不起任何作用。

require在这里不复制文件(不像
c++
#include)来解释,require应该执行该文件(我不应该依赖该文件)@appleapple为什么不应该依赖于该方法?