当前位置:   article > 正文

electron项目搭建_electron builder创建electron项目

electron builder创建electron项目

前言:electron是一个跨平台桌面端应用开发工具。它将整个系统内容分为主进程和渲染进程两个部分(你可以粗略的理解为electron项目开启了两个服务器,一个渲染页面另一个处理electron窗口内容)。这两个"服务器"之间通过JS Bridge进行通信(即:contextBridge),在主进程的preload预加载中可以同时访问到浏览器进程的window对象和主进程的electron api。此时,我们可以经由ipcRerender(electron中从渲染进程(网页)向主进程发送同步和异步消息的api)将electron的api挂载到window对象上,以便在浏览器进程中使用),然后在主进程中通过ipcMain(处理从渲染器进程(网页)发送的异步和同步消息。从渲染器发送的消息将被发送到该模块。)监听即可达到进程通信的目的。

本文章主要介绍如何基于vite搭建electron项目

首先创建文件夹并cd到此文件夹中初始化

npm init -y

然后安装vite环境

npm i vite -D

安装electron(推荐cnpm安装,npm安装有可能会卡住,或者你自己更换镜像地址也行)

cnpm install --save-dev electron

安装electron打包工具

cnpm install  electron-builder -D

接下来安装你想用的框架及配套内容(本文使用的是vue3)

npm i vue vue-router pinia axios less less-loader -s

安装vue的构建工具

npm i @vitejs/plugin-vue -D

现在我们开始配置文件内容

因为是基于vite搭建的项目,故此需要再根目录新建vite.config.mjs(为啥用mjs稍后会解释)文件

  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import electron from 'vite-plugin-electron'
  4. import renderer from 'vite-plugin-electron-renderer'
  5. import { resolve } from 'path'
  6. export default defineConfig({
  7. //项目路径配置
  8. base:'./',
  9. plugins:[
  10. //vue解析插件
  11. vue(),
  12. electron({
  13. //electron项目入口
  14. entry:'./electron/index.js',
  15. vite:{
  16. build:{
  17. //打包目录名
  18. outDir:'dist'
  19. }
  20. }
  21. }),
  22. //渲染进程入口
  23. renderer({
  24. entry:'./src/main.js',
  25. nodeIntegration: true,
  26. })
  27. ],
  28. //允许跨域
  29. server:{
  30. cors:true
  31. },
  32. resolve:{
  33. "alias":{
  34. "@":resolve(__dirname,'./src')
  35. }
  36. }
  37. })

package.json文件配置

  1. {
  2. "name": "electron",
  3. "version": "1.0.0",
  4. //"type":"module",
  5. /* electron项目不推荐"type":"module"故此我们这里就不使用"type":"module"选项,
  6. 启动项目时控制台会提醒The CJS build of Vite's Node API is deprecated
  7. vite已弃用cjs进行构建,我们可以修改vite.config.js为vite.config.mjs
  8. */
  9. //入口文件
  10. "main": "electron/index.js",
  11. "scripts": {
  12. //启动项目
  13. "dev": "vite",
  14. //打包成windows应用
  15. /* --config electron-builder.json 指根据electron-builder.json配置文件打包,所以需要在根
  16. 目录下新建electron-builder.json文件配置打包信息*/
  17. "build": "vite build && electron-builder build --win --x64 --config electron-
  18. builder.json",
  19. //打包成mac应用(注:打包mac应用需要再mac系统中才能打包)
  20. "build:mac":"vite build && electron-builder build --mac --arm64 --config electron-
  21. builder.json",
  22. //打包成linux应用
  23. "build:linux":"vite build && electron-builder build --linux --armv7l --config
  24. electron-builder.json"
  25. },
  26. "keywords": [
  27. "electron",
  28. "vue",
  29. "pinia"
  30. ],
  31. "description":"vite-electron",
  32. "author": "仙古梦回",
  33. "license": "ISC",
  34. "devDependencies": {
  35. "@vitejs/plugin-vue": "^5.1.0",
  36. "electron": "^31.2.1",
  37. "electron-builder": "^24.13.3",
  38. "less": "^4.2.0",
  39. "less-loader": "^12.2.0",
  40. "vite": "^5.3.4",
  41. "vite-plugin-electron": "^0.28.7",
  42. "vite-plugin-electron-renderer": "^0.14.5"
  43. },
  44. "dependencies": {
  45. "@vitejs/plugin-vue": "^5.1.0",
  46. "pinia": "^2.1.7",
  47. "vue": "^3.4.33",
  48. "vue-router": "^4.4.0"
  49. }
  50. }

electron-builder.json文件配置

  1. {
  2. "productName": "仙古梦回",
  3. "files": ["./electron/index.js", "./dist"],
  4. "extraFiles": ["./videos", "./cvideo"],
  5. "directories": {
  6. "output": "./dist"
  7. }
  8. }

现在我们开始构建主进程文件,在根目录新建electron文件夹并新建index.js

  1. const { app,BrowserWindow,ipcMain } = require('electron')
  2. const path = require('path')
  3. const createWindow = ()=>{
  4. const win = new BrowserWindow({
  5. width:1100,
  6. height:700,
  7. webPreferences:{
  8. nodeIntegration:true, // 禁用 nodeIntegration
  9. contextIsolation: true, // 启用上下文隔离
  10. preload:path.join(__dirname,'./preload.js')
  11. }
  12. })
  13. //关闭菜单
  14. win.setMenu(null)
  15. /*环境变量process.env.VITE_DEV_SERVER_URL,用于获取当前项目的启动地址。
  16. 示例:http://localhost:5173
  17. */
  18. if(process.env.VITE_DEV_SERVER_URL){
  19. win.loadURL(process.env.VITE_DEV_SERVER_URL)
  20. }else{
  21. win.loadFile(path.join(__dirname,'../dist/index.html'))
  22. }
  23. }
  24. //监听渲染进程传过来的great事件
  25. ipcMain.on('great',(event,val)=>{
  26. console.log(val)
  27. })
  28. app.whenReady().then(() => {
  29. createWindow()
  30. app.on('activate', () => {
  31. if (BrowserWindow.getAllWindows().length === 0) createWindow()
  32. })
  33. })
  34. app.on('window-all-closed', () => {
  35. if (process.platform !== 'darwin') app.quit()
  36. })

预加载文件配置

  1. const { contextBridge,ipcRenderer } = require('electron')
  2. //用于安全地将 API 从预加载脚本的隔离上下文公开到网站运行的上下文。该 API 也可以像以前一样从 window.myAPI 上的网站访问。
  3. contextBridge.exposeInMainWorld('electronAPI', {
  4. //暴露到渲染进程window对象中的great事件,通过ipcRenderer.send发送给主进程
  5. great: (val) => ipcRenderer.send('great', val)
  6. })

构建渲染进程

在根目录建立src文件夹同时在根目录创建index.html作为展示页面(上文建立主进程index.js文件时有引入这个html文件)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>仙古梦回</title>
  7. <!--注意这里的type="module",我们使用vue开发用的是ESmodule,同时允许跨域crossorigin -->
  8. <script type="module" crossorigin src="./src/main.js" ></script>
  9. </head>
  10. <body>
  11. <div id="app"></div>
  12. </body>
  13. </html>

在src文件夹下开始构建vue项目(与普通vue项目构建一样)

main.js文件

  1. import { createApp } from "vue";
  2. import App from './App.vue'
  3. const app = createApp(App)
  4. app.mount('#app')

App.vue文件配置

  1. <template>
  2. <div>
  3. <button @click="send">向主进程发送你好</button>
  4. </div>
  5. </template>
  6. <script setup>
  7. const send = ()=>{
  8. window.electronAPI.great('你好123' )
  9. }
  10. </script>
  11. <style lang="less" scoped>
  12. </style>

至此,一个基于vite和vue搭建的electron项目就构建完成。

项目代码地址:仙古梦回/electron的搭建

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/905456
推荐阅读
相关标签
  

闽ICP备14008679号