基于Electron-app创建应用

1.使用electron-app脚手架初始化项目

        1.初始化

// 新文件夹内打开终端或者powershell
// 速度慢就换淘宝镜像
npm init electron-vite

        

        2.安装依赖

npm install  //安装所需依赖

        3.启动

npm run dev 

2.使用方法

        1.前端就是vue3+ts+vite的正常开发

        2.electron目录及配置项

                                        

        3.electron创建创建窗口的方法

        /electon/main.ts

// 创建window窗口方法
function createWindow() {
  // 通过electron的api创建窗口
  win = new BrowserWindow({
    icon: path.join(process.env.VITE_PUBLIC, 'electron-vite.svg'),// 图标配置
    title: 'Electron Vite',  // 名称
    backgroundColor: '#fff',  // 背景色
    webPreferences: { // 网页功能配置
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true, // 是否集成 Nodejs
    },
  })

  // 加载页面
  win.webContents.on('did-finish-load', () => {
    win?.webContents.send('main-process-message', (new Date).toLocaleString())
  })

  // 区分环境配置启动路径
  if (VITE_DEV_SERVER_URL) {
    // 开发环境,默认使用的是vite启动的服务地址
    win.loadURL(VITE_DEV_SERVER_URL)
  } else {
    // 生产环境,直接加载打包后的文件 也可以使用 `win.loadFile('index.html')`
    win.loadFile(path.join(process.env.DIST, 'index.html'))
    // win.loadURL('file://'+path.join(__dirname, '../dist/index.html'))
  }
}

4.electron主进程与渲染进程交互问题

        1.渲染进程通过electron的ipcRenderer方法的invoke关键字向主进程发起消息
<template>
  <div>
    字符串: {{ String }}
  </div>
  <div>
    button: <button @click="sendMain">修改字符串</button>
  </div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const String = ref('Hello World')
const sendMain = () => {
  // 这里不用引入electron的ipcRenderer,因为在preload.ts中已经引入了
  // 1. 通过window.ipcRenderer.on监听主进程发送的消息
  window.ipcRenderer.invoke('post-message', String.value)
  // 2. 通过window.ipcRenderer.invoke发送消息给主进程
  window.ipcRenderer.on('fix-post-message', (event, arg) => {
    // 将主进程返回的消息赋值给String
    String.value = arg
  })
}
</script>
        2.主进程通过ipcMain 和 webContents.send方法进行接收信息和发送信息

        electron/main.ts

// 通过ipcMain监听渲染进程传来的消息  
ipcMain.handle('post-message', (event, arg) => {
  console.log('post-message', event, arg)
  // 监听到消息后,主进程通过webContents发送消息给渲染进程 
  win?.webContents.send('fix-post-message', '修改后:'+arg)
})

完成的效果

3.打开新的window,并显示vue-router的其他路由遇到的bug

        1.创建子window时使用开发环境的路径配置路由

        

//主进程创建子窗口的方法
function createChildWindow() {
  child = new BrowserWindow({
    width: 300,
    height:300,
    parent: win, // 父级窗口
    modal:false, // 是否是模态窗口
    webPreferences: { // 网页功能配置
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true, // 是否集成 Nodejs
    },
  })
  if (VITE_DEV_SERVER_URL) {
    // 开发环境用的路径,后面直接加路由即可访问
    child.loadURL(VITE_DEV_SERVER_URL+ '/#/helloWorld')
  } 
}
        2.但是生产环境是本地路径,所以大部分人配置也是会直接在后面直接加上路由
  win.loadFile(path.join(process.env.DIST, 'index.html'+'/#/helloWorld'))

这样写就会面临这打开的新窗口是白屏的未加载出来,调试发现路径不对,但是又不知道哪里不对

     ****正确的写法也是要使用loadUrl去操作打开的路由的,只不过后面的路由没有 /  直接变成 #+路由即可,这是其中的一个坑,比较容易陷进去

function createChildWindow() {
  child = new BrowserWindow({
    width: 300,
    height: 300,
    parent: win, // 父级窗口
    modal:false, // 是否是模态窗口
    webPreferences: { // 网页功能配置
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true, // 是否集成 Nodejs
    },
  })
  if (VITE_DEV_SERVER_URL) {
    child.loadURL(VITE_DEV_SERVER_URL+ '/#/helloWorld')
  } else {
    // 生产环境,直接加载打包后的文件 也可以使用 `win.loadFile('index.html')`
    child.loadURL('file://'+path.join(process.env.DIST, 'index.html'+'#helloWorld'))
  }
}

看一下打包后的生产环境的结果

        3.打包后,安装打开发现白屏报错

        发现是资源没有加载出来

解决办法,增加配置

package.json

build的代码

 "build": {
        "productName": "我的应用",
        "appId": "com.wss.app",
        "win": {
            "requestedExecutionLevel": "requireAdministrator",
            "target": [
                "nsis",
                "zip"
            ]
        },
        "nsis": {
            "oneClick": false,
            "allowElevation": true,
            "allowToChangeInstallationDirectory": true,
            "createStartMenuShortcut": true
        },
        "files": [
            "dist-electron/**/*",
            "dist/**/*"
        ],

        "directories": {
            "output": "build"
        }
    },

vite.config.ts

改完以后重新打包,完成后去dist同级目录下找到build文件夹,就是我们打包后的产物了,再次安装

安装后打开,完全没问题了,子窗口也可以成功创建了

敲键盘不易,请多多点赞

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是基于 React 和 Electron 并使用 electron-builder 进行打包的教程: 1. 创建 React 应用 首先,我们需要使用 create-react-app 工具创建一个 React 应用。在命令行中运行以下命令: ``` npx create-react-app my-electron-app ``` 这会在当前目录下创建一个名为 `my-electron-app` 的新应用。 2. 添加 Electron 接下来,我们需要在项目中添加 Electron。我们可以使用 `electron` 和 `electron-builder` 库来实现这一点。 在命令行中运行以下命令: ``` cd my-electron-app npm install --save-dev electron electron-builder ``` 3. 添加 Electron 入口文件 我们需要创建一个新文件 `public/electron.js`,这是 Electron 的入口文件。在这个文件中,我们需要引入 `electron` 模块并创建一个新的 Electron 窗口。 ```js const { app, BrowserWindow } = require('electron') function createWindow () { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) win.loadURL('http://localhost:3000') } app.whenReady().then(() => { createWindow() app.on('activate', function () { if (BrowserWindow.getAllWindows().length === 0) createWindow() }) }) app.on('window-all-closed', function () { if (process.platform !== 'darwin') app.quit() }) ``` 这个文件创建了一个新的 Electron 窗口,并在窗口中加载了 React 应用的 `http://localhost:3000` 页面。 4. 修改 package.json 文件 我们需要修改 `package.json` 文件中的一些字段,以便 electron-builder 能够正确地打包我们的应用。 ```json { "name": "my-electron-app", "version": "0.1.0", "homepage": "./", "main": "public/electron.js", "build": { "appId": "com.example.my-electron-app", "productName": "My Electron App", "directories": { "output": "build" }, "files": [ "build/**/*", "node_modules/**/*", "public/**/*" ], "mac": { "category": "public.app-category.developer-tools", "icon": "public/icon.icns" }, "win": { "icon": "public/icon.ico" } } } ``` 这个文件中的 `main` 字段告诉 electron-builder 我们的 Electron 入口文件在 `public/electron.js`。`build` 字段中的其他字段指定了打包的一些设置,例如应用的 ID、名称、输出目录、文件列表和图标。 5. 添加打包脚本 最后,我们需要在 `package.json` 文件中添加一个打包脚本。 ```json { "scripts": { "start": "react-scripts start", "build": "react-scripts build", "pack": "electron-builder --dir", "dist": "electron-builder" } } ``` 这些脚本中的 `pack` 脚本会在开发模式下打包应用程序,而 `dist` 脚本会在生产模式下打包应用程序。 6. 运行应用 现在,我们可以运行应用程序。在命令行中运行以下命令: ``` npm start ``` 这将启动 React 应用程序。 然后,在另一个命令行窗口中运行以下命令: ``` npm run pack ``` 这将使用 `electron-builder` 打包应用程序,并在输出目录中生成一个可执行文件。 如果您想要构建一个安装程序,您可以运行以下命令: ``` npm run dist ``` 这将打包应用程序,并在输出目录中生成一个安装程序。 这就是使用 React 和 Electron 并使用 electron-builder 进行打包的教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值