01_electron入门

由于毕业论文可能需要用 electron,所以 Linux 驱动学习慢了下来。

一、安装 node.js

  进入 node.js 官网:Node.js (nodejs.org)

  咱们就是用稳定版,安装包除了安装路径自己选择外,一直点 Next。

  安装完成后需要配置环境,推荐看这篇文章:Node.js下载安装及环境配置教程【超详细】_nodejs下载-CSDN博客

  一切完成后,按下 WIN+R,输入cmd,进入终端。输入以下命令,成功后会出现版本号:

二、electron 环境搭建

  首先创建一个文件夹,你喜欢创建哪都可以,但是路径必须为全英文。

  首先打开 Vscode,打开文件夹,在终端处输入:

npm init

  会看到以下信息:

  之后会生成一个 package.json 文件。

  随后输入:

npm install electron --save-dev

  但我这里出现了这样的问题:

  这时候需要删除 .npmrc 文件,这个文件在 C:\Users\.npmrc,这个文件需要取消隐藏的项目:

  第二个问题是这样:

  

  这个是网络问题,我是直接用梯子下载的,所以重新安装了一遍就好了,安装成功是这样:

  如何来验证是否安装成功,输入 npx electron -v,如果显示以下信息则安装成功。

  或者输入 ./node_modules/.bin/electron -v 查看版本信息,但这时候又遇到一个问题,权限不够:

  我借鉴了这篇文章 无法加载文件xxx.ps1,因为在此系统上禁止运行脚本。_emsdk-main_qq_42541448的博客-CSDN博客,根据这个上面进行就可以完成。

  接下来输入 ./node_modules/.bin/electron 命令就可以进入 Electron 界面了,如果能进入这个界面那安装的就没有问题了。

  这个是项目中安装 electron 环境,在 cmd 中直接使用命令:npm install -g electron进行全局安装。

三、electron 下的 HelloWorld

  首先先创建文件 index.html,这个是我们写的网页,UI 都写在 html 里。

<!DOCTYPE html>
<html lang="en">    <!-- html是跟元素;lang="en" 表示文档使用的语言是英文 -->
<head>
    <meta charset="UTF-8">  <!-- 文档使用的字符编码为 UTF-8 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!--设置了视口的宽度为设备宽度,并且初始缩放比例为1-->
    <title>Hello World</title>  <!-- 设置标题 -->
</head>
<body>
    Hello World 
</body>
</html>

  之后创建 主进程 文件 main.js ,所有打开窗口的业务都要在这里面实现。

/* 
   var允许声明一个变量而不指定其具体类型
   app 模块,它控制应用程序的事件生命周期。
   BrowserWindow 模块,它创建和管理应用程序窗口
*/
const { app, BrowserWindow } = require('electron')  // 将elctron里面的app模块和BrowserWindow模块分别赋值给app和BrowserWindow
const path = require('node:path')

/* 创建 Electron 应用程序的窗口 */
const createWindow = () => {    // 箭头函数
    const win = new BrowserWindow({     // 创建win的窗口对象
        width: 500,
        height: 500,
        webPreference: {    // 创建的窗口设置WebPreferences,并指定了要预加载的JavaScript文件
            preload: path.join(__dirname, 'preload.js')
            /* __dirname 字符串指向当前正在执行脚本的路径 */
            /* path.join API 将多个路径联结在一起,创建一个跨平台的路径字符串 */
        }
    })
    win.loadFile('index.html')  // 加载一个 index.html 文件
}

/* 在 Electron 中,只有在 app 模块的 ready 事件被激发后才能创建浏览器窗口 */
app.whenReady().then(() => {        // 当检测到ready,创建窗口
    createWindow()

    app.on('activate', () =>{       // 应用程序激活时,触发activate事件
        if (BrowserWindow.getAllWindows().length === 0) createWindow()  // 获取当前打开的所有窗口,并判断窗口数量是否为0。如果当前没有打开的窗口,则调用createWindow()函数创建一个新窗口
    })
})

app.on('window-all-closed', () =>{      // 监听'window-all-closed'
    if (process.platform !== 'darwin') app.quit()   // 在所有窗口关闭时,如果当前平台不是 macOS,则退出应用程序
})

  随后在终端输入 npm init --yes,这相当于就不用按这么多次 Enter 了。package.json 文件内容如下:

{
  "name": "01_helloworld",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "start": "electron .",    // 新加的
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

  然后创建 preload.js 文件:

/* 
  在窗口的DOM内容加载完成后,根据当前所使用的依赖的版本号,替换HTML文档中指定元素的文本内容
  所有的 Node.js API接口 都可以在 preload 进程中被调用
*/
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])
    }
  })

  最后在终端输入 npm install,执行 npm start,就可以呈现下面的界面:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/447079.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++容器适配器stack、queue、priority_queue

文章目录 C容器适配器stack、queue、priority_queue1、stack1.1、stack的介绍1.2、stack的使用1.3、stack的模拟实现 2、queue2.1、queue的介绍2.2、queue的使用2.3、queue的模拟实现 3、priority_queue3.1、priority_queue的介绍3.2、priority_queue的使用3.3、仿函数3.4、pri…

Vue3+ts(day02:CompositionAPI、setup)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…

Linux——信号

目录 什么是信号 Linux下的信号 信号的记录 信号处理的常见方式 产生信号 使用组合键产生信号&#xff08;包含core dump&#xff09; 使用系统调用向进程发送信号 由软件条件产生信号 由硬件异常产生信号 阻塞信号 内核表示 sigset_t 信号集操作函数 sigpendin…

基于粒子群(PSO)的PID控制器matlab仿真

算法实现简介 利用粒子群算法对 PID 控制器的参数进行优化设计&#xff0c;其过程如图 所示。 图中&#xff0c;粒子群算法与 Simulink 模型之间连接的桥梁是粒子&#xff08;即 PID 控制器参数&#xff09;和该粒子对应的适 应值&#xff08;即控制系统的性能指标&#xff09…

商家转账到零钱场景申请哪一个

商家转账到零钱是什么&#xff1f; 商家转账到零钱功能是指商家可以通过支付平台将资金直接转账到用户的零钱账户中。在这种情况下&#xff0c;商家不需要用户提供银行账户信息&#xff0c;而是使用支付平台的转账功能将资金直接转移到用户的零钱账户中。 商家转账到零钱的使…

什么是脚本语言?——跟老吕学Python编程

什么是脚本语言&#xff1f;——跟老吕学Python编程 脚本语言脚本语言概述脚本语言定义脚本语言简介脚本语言特点 脚本语言特点脚本语言优点脚本语言缺点 脚本语言应用和发展脚本语言应用脚本语言发展情况 脚本语言分类工作控制语言和ShellGUI脚本应用程序定制的脚本语言WEB编程…

储能系统--户用储能美洲市场(三)

2、美洲市场 2.1、美国户储发展驱动力 &#xff08;1&#xff09;电网老化带来配储需求&#xff0c;户用光储成家庭第二用电保障 美国大部分电网建于20世纪60和70年代&#xff0c;超70%以上的输电系统已经超过了25年&#xff0c;在高负荷运转或者外部环境承压时&#xff0c;…

深入理解MVC和MVVM:构建现代Web应用的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

C语言笔记:类型、运算符与表达式

类型与变量 概念 类型是定义变量的&#xff0c;什么是类型&#xff0c;例如张三是一个人&#xff0c;张三就是变量而人就是类型&#xff0c;什么是变量就是用来存储数据的&#xff0c;为什么变量会分为很多类型&#xff0c;因为存储的数据类型不同&#xff0c;需要不容的类型来…

LVS集群(Linux Virtual server)

集群概念lvs模型lvs调度算法lvs实现lvs高可用性&#xff0c;负载均衡 1 集群和分布式 系统性能扩展方式&#xff1a; Scale UP&#xff1a;垂直扩展&#xff0c;向上扩展,增强&#xff0c;性能更强的计算机运行同样的服务 升级单机的硬件设备Scale Out&#xff1a;水平扩展…

C++的一些基础语法

前言&#xff1a; 本篇将结束c的一些基础的语法&#xff0c;方便在以后的博客中出现&#xff0c;后续的一些语法将在涉及到其它的内容需要用到的时候具体展开介绍&#xff1b;其次&#xff0c;我们需要知道c是建立在c的基础上的&#xff0c;所以c的大部分语法都能用在c上。 1.…

妇女节:打开AI视界,成就“她力量”

根据国内招聘平台猎聘发布的《2024女性人才数据洞察报告》&#xff0c;从2023年3月到2024年2月&#xff0c;女性在AIGC领域的求职人次同比增长了190.49%。随着人工智能时代的降临&#xff0c;女性正以前所未有的姿态&#xff0c;在技术的助力下&#xff0c;蜕变成为新生的力量。…

STM32电源及时钟介绍

一、STM32最小系统 二、电源电路 2.1供电电压VDD&#xff0c;VSS F103VET6 的引角图 在 F103VET6 的引角图中可找到 49\50 角&#xff0c; 74\75 角&#xff0c; 99\100 角&#xff0c; 27\28角&#xff0c;10 \11角一共 5 对的VDD&#xff0c;VSS&#xff0c;也就是给我们芯片…

鸿蒙开发学习入门教程之环境配置

最近鸿蒙开发越来越火&#xff0c;各个大厂都有鸿蒙版本的计划和宣传&#xff0c;看这个趋势&#xff0c;可能会在几年内发展壮大&#xff0c;为我们移动端码农开辟一片新的职场。所以现在开始学起来还是很有必要的。今天就一起开始配置环境搞起来吧。 首先&#xff0c;找到官…

高级语言讲义2010软专(仅高级语言部分)

1.编写一程序&#xff0c;对输入的正整数&#xff0c;求他的约数和。 如&#xff1a;18的约数和为1236939 #include <stdio.h>int getsum(int n){int i,sum0;for(i1;i<n;i)if(n%i0)sumi;return sum; } int main(){int sum getsum(18);printf("%d",sum); …

ERP实施顾问面试题目

02什么是BOM和ECN&#xff1f;它们的完整英文拼写是什么&#xff1f;什么是替代料&#xff1f;&#xff08;10分&#xff09; BOM物料清单是英文Bill of Material的简写&#xff1b;ECN工程变更通知单是英文Engineering Change Notice的简写&#xff1b;替代料&#xff1a;由于…

CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽(时隔一年,再谈C++抽象内存模型)

CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽 CPP的四大内存分区模型 在 C 中&#xff0c;**内存分区是一种模型&#xff0c;用于描述程序运行时内存的逻辑组织方式&#xff0c;但在底层操作系统中&#xff0c;并不存在严格意义上的内存分区。**操作系统通常将内存分…

08 数据结构之查找-Hash、二分、顺序

引言&#xff1a; 实现链式哈希的代码 /* 质数&#xff1a; 对于大于1的正自然数&#xff0c; 处理1和它本身别的数都无法整除它&#xff0c; 这个数就是质数 hash函数的确定&#xff1a; α(质量因子) 0.7-0.8比较合适 m&#xff1a;存储数据的真实个数 n&#xff1a;存储空…

H264解码器实现-帧间预测

前言 本文所说的帧间预测是指根据当前预测块的MV向量和预测所需的参考块数据&#xff0c;计算出当前预测块的预测像素值的过程。该过程得到的预测像素值经过运动补偿后&#xff08;与反变换量化之后得到的残差像素值相加&#xff09;可以得到滤波前的重建像素值。 原理说明 …

<Linux> 初识线程

目录 前言&#xff1a; 一、什么是线程 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;线程理解 &#xff08;三&#xff09;线程与进程的关系 &#xff08;四&#xff09;简单实用线程 &#xff08;五&#xff09;重谈虚拟地址空间 1. 页表的大小 2…