很平常的一个单页应用。我们将其放在新建 electron 项目根目录下,以备后用。
"make-win": "npx electron-packager ./ custom-package-name --platform=win32 --arch=x64 --out=jimmy-dist --overwrite --icon=./static/logo.ico --ignore='out|README.md|Jenkinsfile'"下面我们来解析下:
packagerConfig: { asar: true, icon: path.resolve(__dirname, 'static/logo.ico') // build app icon }3. 自定义菜单栏
// create a custom menu const createCustomMenu = () => { const template = [ { label: '', // for project title tag placeholder }, { label: '菜单', submenu: [ { label: '刷新', click: () => { BrowserWindow.getFocusedWindow().reload(); } }, { label: '返回', click: () => { if (mainWindow && mainWindow.webContents.canGoBack()) { mainWindow.webContents.goBack(); } } }, { label: '关闭', click: () => { app.quit(); } } ] }, { label: '调试', submenu: [ { label: '控制台', click: () => { BrowserWindow.getFocusedWindow().webContents.openDevTools(); } } ] } ]; const menu = Menu.buildFromTemplate(template); Menu.setApplicationMenu(menu); }
上面我们设置了 菜单 和 调试 的菜单。
// 开启服务 const triggerServer = (host, port, directory) => { const server = createServer({ root: path.join(__dirname, directory) // 指定服务器根目录 }); // 堆代码 duidaima.com server.listen(port, host, () => { console.log(`Server running at http://${host}:${port}/`) }) return server; }上面我们封装了个开发服务的方法,方便多个服务开启。我们只要传入 host,port 和 directory (打包文件的目录)即可。
const { createServer } = require('http-server'); app.whenReady().then(() => { const server1 = triggerServer("localhost", "8081", "dist"); mainWindow = new BrowserWindow({ webPreferences: { nodeIntegration: true, webSecurity: false }, width: 800, height: 600, title: 'ElectronDist', icon: path.join(__dirname, './static/logo.png') // for window platform }); if(process.platform === 'darwin') { // mac platform app.dock.setIcon(path.join(__dirname, './static/logo.png')) } mainWindow.loadURL("http://localhost:8081") app.on('before-quit', () => { // 记得关闭 server1.close(); }); })在 before-quite 钩子函数,即退出之前,即可关闭服务。