首页 > 其他分享 >Electron生成 exe

Electron生成 exe

时间:2024-06-13 15:23:27浏览次数:21  
标签:exe const -- app electron 生成 Electron forge js

需求:

打包PC 桌面程序,

前提条件:

1、node (有个nvm 管理工具 可以管理不同的node版本)

2、Electron 官网入口

 

步骤:

1、安装前置内容

2、编辑 main.js package.js preload.js 文件

// main.js

// Modules to control application life and create native browser window
const { app, BrowserWindow} = require('electron')


// 创建一个UDP客户端 socket
// const dgram = require('dgram');
// const client = dgram.createSocket('udp4');
// function sendUDPMessage(msg) {
//   // 发送消息给服务器
//   client.send(msg, 50913, '127.0.0.1', (err) => {
//     if (err) {
//       console.error(err);
//     } else {
//       console.log('Message sent');
//     }
//   });
// }

// 实现WebSocket服务器
// const WebSocket = require('ws');
// let server;
// app.on('ready', () => {
//   // 创建WebSocket服务器
//   server = new WebSocket.Server({ port: 6000 });

//   server.on('connection', (socket) => {
//     console.log('Client connected');
//     socket.on('message', (message) => {
//       console.log(`Received: ${message}`);
//       // 可以在这里处理消息并回传给客户端
//       socket.send('Message received');
//       sendUDPMessage(message);

//     });
//   });
//   createWindow(); // 服务启动完成、创建窗口
// });





const path = require('node:path')

const createWindow = () => {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    // 窗口大小
    // width: 800,
    // height: 600,
    // 页面路径
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      autoplayPolicy: 'no-user-gesture-required', // 允许自动播放视频
      // 内部通信
      // nodeIntegration: true, // 或者在 Electron >= 12 中使用 contextIsolation: false 和 nodeIntegration: true
      // contextIsolation: false // 对于 Electron >= 12 是必需的
    },
    // 窗口背景色
    // backgroundColor: '#2e2c29'
  })
  // 加载本地资源页面
  mainWindow.loadFile('data/index.html')

  // mainWindow.loadURL('https://app.singmap.com')

  mainWindow.setFullScreen(true) // 全屏

  mainWindow.removeMenu() // 去除菜单栏

  // mainWindow.webContents.openDevTools() // 打开开发者工具


  // 页面通信

  // 监听渲染进程发来的消息
  // ipcMain.on('messageToMain', (event, arg) => {
  //   console.log(arg) // 打印从渲染进程接收到的消息
  //   switch (arg) {
  //     case 'max':
  //       mainWindow.setFullScreen(true) // 全屏
  //       break;
  //     case 'min':
  //       mainWindow.setFullScreen(false) // 不全屏
  //       break;
  //     case 'quit':
  //       app.quit()
  //       break;
    
  //     default:
  //       break;
  //   }
  //   // 向渲染进程回复消息
  //   event.sender.send('replyFromMain', 'Hello from Main, received your message!')
  // })


}



// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
  createWindow()
  app.on('activate', () => {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})


// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

 

// package.js


{
  "name": "SoraSalesKit",
  "version": "1.0.0",
  "description": "Sora Sales Kit Pro",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "electron-forge start",
    "make": "electron-forge make",
    "packager": "electron-packager . exe --win --out ../exe --arch=x64 --electron-version=10.1.0",
    "packager32": "electron-packager . exe --win --out ../exe --arch=ia32 --electron-version=10.1.0 --overwrite --ignore=node_modules --electron-zip-dir=./electron-zip",
    "package": "electron-forge package"
  },
  "author": "cc",
  "license": "ISC",
  "devDependencies": {
    "@electron-forge/cli": "^7.4.0",
    "@electron-forge/maker-deb": "^7.4.0",
    "@electron-forge/maker-rpm": "^7.4.0",
    "@electron-forge/maker-squirrel": "^7.4.0",
    "@electron-forge/maker-zip": "^7.4.0",
    "@electron-forge/plugin-auto-unpack-natives": "^7.4.0",
    "@electron-forge/plugin-fuses": "^7.4.0",
    "@electron/fuses": "^1.8.0",
    "electron": "^31.0.0"
  },
  "dependencies": {
    "dgram": "^1.0.1",
    "electron-squirrel-startup": "^1.0.1",
    "ws": "^8.17.0"
  },
  "build": {
    "fuses": {
      "node-symbol-resolver": {
        "enable": true
      }
    }
  }
}

 

 

// preload.js

window.addEventListener('DOMContentLoaded', () => {
  const replaceText = (selector, text) => {
    const element = document.getElementById(selector)
    if (element) element.innerText = text
  }

  for (const dependency of ['chrome', 'node', 'electron']) {
    replaceText(`${dependency}-version`, process.versions[dependency])
  }
})

 

常用命令:

nvm list :查看node已安装版本

nvm use 12.14.0 : 切换node版本

npm start : 启动项目

npm run make : 打包项目

 

 

遇到的问题:

1、node版本问题

2、win32 打包失败问题

添加 forge.config.js 文件进行打包预处理

// forge.config.js


module.exports = {
  packagerConfig: {},
  rebuildConfig: {},
  makers: [
    {
      name: '@electron-forge/maker-squirrel',
      platforms: ['win32'],
      config: {
      }
    },
    {
      name: '@electron-forge/maker-zip',
      config: {}
    },
    {
      name: '@electron-forge/maker-deb',
      config: {}
    },
    {
      name: '@electron-forge/maker-rpm',
      config: {}
    }
  ]
}

 

标签:exe,const,--,app,electron,生成,Electron,forge,js
From: https://www.cnblogs.com/yc-c/p/18245951

相关文章

  • 文心一言Prompt优化:生成高质量的对话
    本文由ChatMoney团队出品随着人工智能技术的快速发展,对话生成系统已经成为人机交互的重要形式之一。作为百度研发的知识增强大模型,文心一言在对话生成领域展现出强大的潜力。然而,要实现高质量、高准确率的对话生成,除了模型本身的性能外,Prompt(提示词)的设计和优化同样至关重要。本......
  • 实验3 中间代码生成 *语法制导的代码+生成语句代码生成+条件判断语句代码生成
    实验3中间代码生成help-assignment代码已完成除了语法树,编译器里另一个核心数据结构就是中间代码(IntermediateRepresentation,IR)。中间代码是编译器从源语言到目标语言之间采用的一种过渡性质的代码形式,往往介于语法树和汇编代码之间,其表示独立于机器,易于分析和翻译......
  • Android studio 自动复制生成的 apk
    KTS脚本//顶层build.gradle.ktsvalapkBaseName:String="VoiceAssistant"allprojects{project.extra.apply{set("apkBaseName",apkBaseName)}}//模块build.gradle.ktsandroid{ applicationVariants.all{......
  • 直接用sql语句来查询和分析excel表,不需要导数据,提供了sql语句自动生成,不会sql也能用
         用sql语句来查询excel表,我们需要把excel表格导入到数据库中,然后用数据库的管理工具写sql语句来进行查询。方法有很多,我们不一一描述。     今天我们要说的是直接用sql语句来查询和分析excel表。为什么有这么一个想法呢?程序员或者会sql语句的人,不太愿......
  • 用 KV 缓存量化解锁长文本生成
    很高兴和大家分享HuggingFace的一项新功能:KV缓存量化,它能够把你的语言模型的速度提升到一个新水平。太长不看版:KV缓存量化可在最小化对生成质量的影响的条件下,减少LLM在长文本生成场景下的内存使用量,从而在内存效率和生成速度之间提供可定制的权衡。你是否曾尝试过......
  • kettle从入门到精通 第六十八课 ETL之kettle kettle随机数生成的一些方案
    1、在做ETL数据抽取的时候,会用到生成随机数的功能,今天我们一起来学习下如何生成随机数据。如下图所示 2、将生成随机数拉倒画布即可,然后设置字段名称和选择合适的类型,如下图所示:类型:随机数字:生成一个介于0和1之间的随机数随机整数:生成一个随机的32-bit整数随机字符串:基......
  • jQuery生成微信二维码名片扫码添加联系人代码
    jQuery生成微信二维码名片扫码添加联系人代码,可以设置联系人姓名,公司,职务,地址,手机,邮箱,网址,备注信息生成二维码。 js代码 <scriptsrc="js/jquery.min.js"></script><scriptsrc="js/qrcode.js"></script><script>varname,company,title,address,mobile,e......
  • C# 每次生成之后自动更新软件版本号
    第一步:在解决方案资源管理器中找到【AssemblyInfo.cs】文件,修改版本生成方式:[assembly:AssemblyVersion("1.0.0.*")] //程序集的版本信息由下列四个值组成:////主版本//次版本//生成号//修订号////可以指定所有这些值,也可以使用“生成号”......
  • 【数据库表结构整理】screw 一键生成数据库文档,从此告别人工整理文档
    使用步骤如下:引入依赖在pom.xml文件中引入如下依赖<dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</artifactId><version>1.0.3</version></dependency>编写代码新建测试类,编写如下代码生成文档,其次配置数据库相关连接信息;根......
  • MoneyPrinterPlus:AI自动短视频生成工具,赚钱从来没有这么容易过
    这是一个轻松赚钱的项目。短视频时代,谁掌握了流量谁就掌握了Money!所以给大家分享这个经过精心打造的MoneyPrinterPlus项目。它可以:使用AI大模型技术,一键批量生成各类短视频。它可以:一键混剪短视频,批量生成短视频不是梦。它可以:自动把视频发布到抖音,快手,小红书,视频号上。......