公司有需求做桌面应用,趁着周末尝试使用electron做一个自己的小桌面应用练练手。
开发环境昨天配置完成,今天正式开干。
开发环境的搭建
喜欢听的歌有些在某云音乐,有些在某鹅音乐,所以决定自己开个会员,把自己想听的歌下载下来放自己服务器,再做一个桌面播放器。
一天下来做了个寂寞,看看效果
在这里插入图片描述
在这里插入图片描述

记录今天踩过的坑
一、使用vue-router之后,打包出现白屏
原因:使用了history路由,把createWebHistory改成createWebHashHistory,使用hash路由

const router = createRouter({
  history: createWebHashHistory(import.meta.env.BASE_URL),
  routes
})

二、窗口头部太难看了,隐藏掉窗口头部和菜单栏之后无法关闭程序,只能使用ipcRenderer和主进程通信关闭程序
主进程main.js
contextIsolation 不启用隔离时报错无法进行通信
preload.js 使用相对路径时报错 must be an absolute path

//...
let win = new BrowserWindow({
    width: 800,
    height: 600,
    minWidth:800,
    minHeight:600,
    transparent: true,//窗口背景透明
    webPreferences: {
      nodeIntegration: false, // 是否允许在页面中使用节点js 不安全
      contextIsolation: true, // 不启用上下文隔离 这里如果是false的话无法通信
      enableRemoteModule: true, // 允许使用 remote 模块
      preload: path.join(__dirname,"preload.js")
    },
    frame:false, //隐藏标题栏
  });
  //其他逻辑代码
  //...
    // 切换全屏事件
  ipcMain.on('toggle-full-screen', () => {
    toggleFullScreen();
  });
  // 最小化窗口事件
  ipcMain.on('minimum', () => {
    win.minimize();
  });
  // 关闭程序
  ipcMain.on('closeProgram', () => {
    app.quit();
  });

preload.js
这里面一开始我使用import引入electron一直运行无效,也没有报错,问了GPT说路径如果没错,可能语法不支持,使用require之后成功

const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld('ipcRenderer', {
  send: (channel, data) => {
    let validChannels = ['toggle-full-screen','minimum','closeProgram'] // 配置合法消息名
    if (validChannels.includes(channel)) {
      ipcRenderer.send(channel, data)
    }
  },
  receive: (channel, func) => {
    let validChannels = ['toggle-full-screen','minimum','closeProgram']// 配置合法监听事件名称
    if (validChannels.includes(channel)) {
      ipcRenderer.on(channel, (event, ...args) => func(...args))
    }
  }
})
alert('1')//没弹窗就是失败了 成功后删除

自己写的窗口头部组件header.vue

//...
const toggleFullScreen = ()=>{
    (window as any).ipcRenderer.send('toggle-full-screen','');
}
const minimize = ()=>{
    (window as any).ipcRenderer.send('minimum','');
}
const closeProgram = ()=>{
    (window as any).ipcRenderer.send('closeProgram','');
}
//...
<div @click="minimize">最小化</div>
<div @click="toggleFullScreen ">全屏</div>
<div @click="closeProgram ">退出</div>

周日了,要注意劳逸结合

GitHub 加速计划 / vu / vue
108
18
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:3 个月前 )
9e887079 [skip ci] 1 年前
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 1 年前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐