当前位置: 首页 > news >正文

electron学习笔记

electron学习笔记

新建目录

mkdir d:/test
cd test

初始化项目的命令:

npm init
一路回车,完成之后,在package.json文件中:
author  要补全
description  要补全,否则后面无法打包。

接下来,安装electron,使用下面的命令:

npm install --save-dev electron
上面的命令简化为:
npm i electron -D


把package.json文件中的

"test": "echo \"Error: no test specified\" && exit 1"   这一行删除,
修改为:
"start":"electron ."

  "scripts": {"start":"electron ."},

新建个main.js


使用下面的命令,运行程序:
npm start

打开浏览器调试窗口:

ctrl+shift+i  

ctrl+r刷新网页


在Chromium-based浏览器中(如Google Chrome、Brave、Edge等),你可以使用以下快捷键来调整浏览器窗口的缩放级别:

放大页面内容:Ctrl + + (Ctrl和加号)
缩小页面内容:Ctrl + - (Ctrl和减号)
复原到默认缩放比例(通常是100%):Ctrl + 0


最小化然后还原窗口(使用Windows + Down Arrow 或者Windows + Up Arrow 如果你在Windows系统上)

vue用于electron的网址:

https://cn-evite.netlify.app

完整的程序代码:

目录结构, 见下图:

在html文件夹下面,有2个文件:index.html和render.js

package.json文件:

{"name": "etest","version": "1.0.0","description": "electron-learning","main": "main.js","scripts": {"start": "electron ."},"author": "xuexi","license": "ISC","devDependencies": {"electron": "^31.2.1"}
}

main.js文件:

const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');
const fs = require('fs');
const { log } = require('console');function writefile(event, data) {//console.log(event);console.log(data);fs.writeFileSync('d:/hello.txt', data)}function readFile() {const res = fs.readFileSync('d:/hello.txt').toString()console.log(res);return res
}function createHTMLWindow() {const htmlWin = new BrowserWindow({width: 800,height: 600,autoHideMenuBar: true,webPreferences: {contextIsolation: true,nodeIntegration: false,enableRemoteModule: false,preload: path.resolve(__dirname, './preload.js')}});ipcMain.on("file-save", writefile)ipcMain.handle('file-read', readFile)htmlWin.loadFile(path.join(__dirname, 'html', 'index.html'));
}app.whenReady().then(() => {createHTMLWindow();
});app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit();}
});app.on('activate', () => {if (BrowserWindow.getAllWindows().length === 0) {createHTMLWindow();}
});

preload.js文件:

const { contextBridge, ipcRenderer } = require('electron')contextBridge.exposeInMainWorld('myAPI', {version: process.version,saveFile: (data) => {ipcRenderer.send('file-save', data)},readFile() {return ipcRenderer.invoke('file-read')}
})

render.js文件:

const btn1 = document.getElementById('btn1')const btn2 = document.getElementById('btn2')
const input = document.getElementById('input')const btn3 = document.getElementById('btn3')btn1.onclick = () => {console.log(myAPI.version);alert(myAPI.version)
}btn2.onclick = () => {myAPI.saveFile(input.value)
}btn3.onclick = async () => {let data = await myAPI.readFile()alert(data)
}

index.html文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Live Stream Viewer Counter</title><style>body {font-family: Arial, sans-serif;text-align: center;margin-top: 20%;}</style>
</head>
<body><button id="btn1">点击我查看Node软件版本号</button><br><hr>    <input id="input" type="text"><br><br><button id="btn2">向D盘写入hello.txt</button><br><br><button id="btn3">读取D盘hello.txt文件的内容</button><hr><script type="text/javascript" src="./render.js">      </script>
</body>
</html>

打包源代码为应用程序,exe格式的安装程序

有4种方法,本文采用最复杂的一种方式。


安装打包程序,下面的这行命令,必须在存放程序源代码的目录下执行:

npm install electron-builder -D


在package.json中进行相关配置,具体配置如下:

{"name": "etest","version": "1.0.0","description": "electron-learning","main": "main.js","scripts": {"start": "electron .","build": "electron-builder"},"build": {"appId": "FFFFFFFFXXXXXXXX","win": {"icon": "./logo.ico","target": [{"target": "nsis","arch": ["x64"]}]},"nsis": {"oneClick": false,"perMachine": true,"allowToChangeInstallationDirectory": true       }},"author": "xuexi","license": "ISC","devDependencies": {"electron": "^31.2.1","electron-builder": "^24.13.3"}
}

开始打包的命令:

npm run build

此种方式,因为要下载github上的程序包太慢,导致打包失败,慎用!

打包完成后,在源代码目录下,会自动生成dist文件夹,exe文件就在该文件夹里面。

----------------------

另外的打包方式:

npm install --global electron-packager
electron-packager . etest --overwrite --asar=true --platform=win32 --arch=x64 --version=31.2.1

electron学习的视频链接:

禹神:一小时快速上手Electron,前端Electron开发教程_哔哩哔哩_bilibili

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • linux之网络子系统-本机发包到本机 实现
  • 1比25万基础电子地图(广东版)
  • 踏进互动科技世界使用Arduino
  • 【测开能力提升-Javascript】JavaScript运算符流程结构
  • 构建高效Node.js中间层:探索请求合并转发的艺术
  • 深入解析sizeof和strlen的区别与联系
  • 麒麟V10安装nginx、mysql报错缺少包:error while loading shared libraries libssl.so.10
  • Sparksql常用的json相关函数
  • PostgreSQL 中如何处理数据的唯一性约束?
  • JVM 21 的优化指南:如何进行JVM调优,JVM调优参数有哪些
  • 标签嵌套规则/行内元素/块元素的使用
  • 算法通关:006_1二分查找
  • 设计模式简述(一)
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十九章 Linux MISC驱动
  • Java实战中如何使用多线程(线程池)及其为什么使用?
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【翻译】babel对TC39装饰器草案的实现
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Angular 响应式表单之下拉框
  • AngularJS指令开发(1)——参数详解
  • Asm.js的简单介绍
  • Babel配置的不完全指南
  • bootstrap创建登录注册页面
  • Bytom交易说明(账户管理模式)
  • Git学习与使用心得(1)—— 初始化
  • IDEA 插件开发入门教程
  • React 快速上手 - 07 前端路由 react-router
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 分布式任务队列Celery
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 利用jquery编写加法运算验证码
  • 设计模式(12)迭代器模式(讲解+应用)
  • 思否第一天
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $(selector).each()和$.each()的区别
  • $L^p$ 调和函数恒为零
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (正则)提取页面里的img标签
  • (转)fock函数详解
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .NET Core 中的路径问题
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃