Electron桌面应用

Electron桌面应用

可以使用js,css,html完成pc应用的跨平台开发,内置多种方法访问pc资源

1.创建应用

mkdir my-electron-app && cd my-electron-app

npm init

init初始化命令会提示您在项目初始化配置中设置一些值 为本教程的目的,有几条规则需要遵循:

  • entry point 应为 main.js.
  • authordescription 可为任意值,但对于应用打包是必填项。

electron 包安装到应用的开发依赖中。

npm install --save-dev electron

package.json配置文件中的scripts字段下增加一条start命令:

{
“scripts”: {
“start”: “electron .”
}
}

程序的入口都是 main 文件。 这个文件控制了主进程,它运行在一个完整的Node.js环境中,负责控制您应用的生命周期,显示原生界面,执行特殊操作并管理渲染器进程

创建页面

1.应用创建窗口前,我们需要先创建加载进该窗口的内容

2.各个窗口显示的内容可以是本地HTML文件,也可以是一个远程url。

3.项目根目录下创建一个名为index.html的文件:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using Node.js <span id="node-version"></span>,
    Chromium <span id="chrome-version"></span>,
    and Electron <span id="electron-version"></span>.
  </body>
</html>

主体文本中丢失了版本编号。 将使用 JavaScript 动态插入它们

窗口中打开页面

Electron模块:

  • app 模块,它控制应用程序的事件生命周期。
  • BrowserWindow 模块,它创建和管理应用程序 窗口。

主进程运行着 Node.js,您可以在 main.js 文件头部将它们导入作为 CommonJS 模块:

const { app, BrowserWindow } = require('electron')
//添加一个createWindow()方法将index.html加载进一个新的browserWindow实例
const createWindow = () => {
  const win = new BrowserWindow({
    width: 800,
    height: 600
  })

  win.loadFile('index.html')
}
//调用createWindow()函数来打开您的窗口。
app.whenReady().then(() => {
  createWindow()
})
//在 app 模块的 ready 事件被激发后才能创建浏览器窗口。 
//可以通过使用 app.whenReady() API来监听此事件。 
//在whenReady()成功后调用createWindow()。

应用程序窗口在每个OS下有不同的行为,Electron中开发者可以在app中实现这些约定。

一般可以使用 进程 全局的 platform 属性来专门为某些操作系统运行代码。

在Windows和Linux上,关闭所有窗口通常会完全退出一个应用程序。

监听 app 模块的 'window-all-closed' 事件。如果用户不是在 macOS(darwin) 上运行程序,则调用 app.quit()

//退出,窗口关闭的监听
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})
//macOS 应用通常即使在没有打开任何窗口的情况下也继续运行
//监听 app 模块的 activate 事件。如果没有任何浏览器窗口是打开的,则调用 createWindow() 方法。
app.whenReady().then(() => {
  createWindow()

  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

通过预加载脚本从渲染器访问Node.js

输出Electron的版本号和它的依赖项到web页面上,主进程通过Node的全局 process 对象访问这个信息, 然而,不能直接在主进程中编辑DOM,因为它无法访问渲染器 文档 上下文。 它们存在于完全不同的进程!

// 预加载脚本 在渲染器进程加载之前加载,并有权访问两个 渲染器全局 (例如 window 和 document) 和 Node.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])
  }
})
//上面的代码访问 Node.js的 process.versions 对象,并运行一个基本的 replaceText 辅助函数将版本号插入到 HTML 文档中。
// include the Node.js 'path' module at the top of your file
const path = require('path')

// modify your existing createWindow() function
const createWindow = () => {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
        //__dirname字符串指向当前正在执行脚本的路径 (在本例中,它指向你的项目的根文件夹)。
        //path.join API 将多个路径联结在一起,创建一个跨平台的路径字符串
    }
      // BrowserWindow 构造器中将路径中的预加载脚本传入 webPreferences.preload 选项。
      //将此脚本附加到渲染器流程
  })

  win.loadFile('index.html')
}
// ...

将功能添加到网页内容

与网页内容的任何交互,想要将脚本添加到您的渲染器进程中。

由于渲染器运行在正常的 Web 环境中,因此您可以在 index.html 文件关闭 之前添加一个

<script src="./renderer.js"></script>

renderer.js 中包含的代码可以在接下来使用与前端开发相同的 JavaScript API 和工具。例如使用 webpack 打包并最小化您的代码,或者使用 React 来管理您的用户界面。

应用创建步骤

  • 启动了一个Node.js程序,并将Electron添加为依赖。
  • 创建了一个 main.js 脚本来运行我们的主要进程,它控制我们的应用程序 并且在 Node.js 环境中运行。 在此脚本中, 我们使用 Electron 的 appBrowserWindow 模块来创建一个浏览器窗口,在一个单独的进程(渲染器)中显示网页内容。
  • 为了访问渲染器中的Node.js的某些功能,我们在 BrowserWindow 的构造函数上附加了一个预加载脚本。

打包分发应用程序

//将 Electron Forge 添加到您应用的开发依赖中,并使用其"import"命令设置 Forge 的脚手架:
npm install --save-dev @electron-forge/cli
npx electron-forge import

//使用 Forge 的 make 命令来创建可分发的应用程序:
npm run make

//Electron-forge 会创建 out 文件夹,软件包在那里:

electron下载总失败

使用定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:

 npm install -g cnpm --registry=https://registry.npmmirror.com
 
 我在构建一个vue项目时,npm install 卡住不动,卡住的地方控制台信息是

reify:rxjs: timing reifyNode:node_modules/listr/node_modules/rxjs
1
原因:文件缓存问题或镜像仓库网络问题

解决方法:
1.删除项目中的node_modules文件夹和package-lock.json;
在控制台执行下面命令
// 设置淘宝镜像
npm config set registry https://registry.npm.taobao.org 

// 查看配置是否成功
npm config get registry 

// 重新执行 npm install
npm install

2.//先运行

npm install -g cnpm --registry=https://registry.npmmirror.com
//再运行

cnpm install --save-dev electron

结尾

main.js是应用程序的主进程,运行在nodejs环境,可以访问pc上的各种资源(本地文件,菜单,系统对话框等;负责创建和管理程序的窗口。

每个程序窗口都是一个html页面;chrome也有一个主进程,每个打开的页面都是一个子进程,electron中每个打开窗口都是一个渲染器进程。

preload是预加载脚本,在渲染器进程加载前加载;可以访问渲染器全局环境(window,document对象),也可以访问nodejs环境;类似chrome插件。

render是渲染器进程脚本,运行在web环境。
自己写的劣质dom链接

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Electron是一个使用JavaScript,HTML和CSS构建桌面应用程序的框架。通过将Chromium和Node.js嵌入到其二进制文件中,Electron允许开发者维护一个JavaScript代码库,并创建可在Windows,macOS和Linux上运行的跨平台应用程序,无需本机开发经验。使用Electron开发桌面应用可以将现有的Web技术与原生应用的功能相结合,同时还能够利用Electron丰富的API和工具来增强应用的功能和性能。 创建一个Electron应用程序遵循与其他Node.js项目相同的一般结构。首先需要在电脑上安装Node.js,然后通过命令行创建一个文件夹并初始化一个npm包。接下来,可以使用npm安装Electron依赖和其他必要的库。在初始化完成后,可以开始编写应用程序的主要代码,使用HTML,CSS和JavaScript来创建用户界面和实现应用功能。最后,使用Electron提供的打包工具将应用程序打包成可执行文件,可以在各个操作系统上进行安装和运行。 使用Electron可以快速开发出一个功能完善的桌面应用程序,并且能够跨平台运行,为用户提供更好的用户体验。同时,由于使用了Web技术,开发者可以充分利用现有的前端开发经验和工具,提高开发效率。因此,Electron成为了很多开发者选择的框架之一。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用Electron构建桌面应用](https://download.csdn.net/download/weixin_38749268/15444248)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【Electron桌面应用开发](https://blog.csdn.net/weixin_64172426/article/details/126094153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值