Webpack如何构建Electron应用

这次给大家带来Webpack如何构建Electron应用,Webpack构建Electron应用的注意事项有哪些,下面就是实战案例,一起来看一下。

Electron 可以让你使用开发 Web 的技术去开发跨平台的桌面端应用,由 Github 主导和开源,大家熟悉的 Atom 和 VSCode 编辑器就是使用 Electron 开发的。

Electron 是 Node.js 和 Chromium 浏览器的结合体,用 Chromium 浏览器显示出的 Web 页面作为应用的 GUI,通过 Node.js 去和操作系统交互。 当你在 Electron 应用中的一个窗口操作时,实际上是在操作一个网页。当你的操作需要通过操作系统去完成时,网页会通过 Node.js 去和操作系统交互。

采用这种方式开发桌面端应用的优点有:

降低开发门槛,只需掌握网页开发技术和 Node.js 即可,大量的 Web 开发技术和现成库可以复用于 Electron;

由于 Chromium 浏览器和 Node.js 都是跨平台的,Electron 能做到写一份代码在不同的操作系统运行。

在运行 Electron 应用时,会从启动一个主进程开始。主进程的启动是通过 Node.js 去执行一个入口 JavaScript 文件实现的,这个入口文件 main.js 内容如下:

const { app, BrowserWindow } = require('electron')// 保持一个对于 window 对象的全局引用,如果你不这样做,// 当 JavaScript 对象被垃圾回收, window 会被自动地关闭let win// 打开主窗口function createWindow() { // 创建浏览器窗口 win = new BrowserWindow({ width: 800, height: 600 }) // 加载应用的 index.html const indexPageURL = `file://${dirname}/dist/index.html`; win.loadURL(indexPageURL); // 当 window 被关闭,这个事件会被触发 win.on('closed', () => {  // 取消引用 window 对象  win = null })}// Electron 会在创建浏览器窗口时调用这个函数。app.on('ready', createWindow)// 当全部窗口关闭时退出app.on('window-all-closed', () => { // 在 macOS 上,除非用户用 Cmd + Q 确定地退出 // 否则绝大部分应用会保持激活 if (process.platform !== 'darwin') {  app.quit() }})

登录后复制

主进程启动后会一直驻留在后台运行,你眼睛所看得的和操作的窗口并不是主进程,而是由主进程新启动的窗口子进程。

应用从启动到退出有一系列生命周期事件,通过 electron.app.on() 函数去监听生命周期事件,在特定的时刻做出反应。 例如在 app.on(‘ready’) 事件中通过 BrowserWindow 去展示应用的主窗口。

启动的窗口其实是一个网页,启动时会去加载在 loadURL 中传入的网页地址。 每个窗口都是一个单独的网页进程,窗口之间的通信需要借助主进程传递消息。

总体来说开发 Electron 应用和开发 Web 应用很相似,区别在于 Electron 的运行环境同时内置了浏览器和 Node.js 的 API,在开发网页时除了可以使用浏览器提供的 API 外,还可以使用 Node.js 提供的 API。

接入 Webpack

接下来做一个简单的 Electron 应用,要求为应用启动后显示一个主窗口,在主窗口里有一个按钮,点击这个按钮后新显示一个窗口,且使用 React 开发网页。

由于 Electron 应用中的每一个窗口对应一个网页,所以需要开发2个网页,分别是主窗口的 index.html 和新打开的窗口 login.html 。 也就是说项目由2个单页应用组成,这和3-10管理多个单页应用 中的项目非常相似,让我们来把它改造成一个 Electron 应用。

需要改动的地方如下:

在项目根目录下新建主进程的入口文件 main.js ,内容和上面提到的一致;

主窗口网页的代码如下:

import React, { Component } from 'react';import { render } from 'react-dom';import { remote } from 'electron';import path from 'path';import './index.css';class App extends Component { // 在按钮被点击时 handleBtnClick() {  // 新窗口对应的页面的 URI 地址  const modalPath = path.join('file://', remote.app.getAppPath(), 'dist/login.html');  // 新窗口的大小  let win = new remote.BrowserWindow({ width: 400, height: 320 })  win.on('close', function () {   // 窗口被关闭时清空资源   win = null  })  // 加载网页  win.loadURL(modalPath)  // 显示窗口  win.show() } render() {  return (   

Page Index

) }}render(, window.document.getElementById('app'));

登录后复制

其中最关键的部分在于在按钮点击事件里通过 electron 库里提供的 API 去新打开一个窗口,并加载网页文件所在的地址。

页面部分的代码已经修改完成,接下来修改构建方面的代码。 这里构建需要做到以下几点:

构建出2个可在浏览器里运行的网页,分别对应2个窗口的界面;

由于在网页的 JavaScript 代码里可能会有调用 Node.js 原生模块或者 electron 模块,也就是输出的代码依赖这些模块。但由于这些模块都是内置支持的,构建出的代码不能把这些模块打包进去。

要完成以上要求非常简单,因为 Webpack 内置了对 Electron 的支持。 只需要给 Webpack 配置文件加上一行代码即可,如下:

target: 'electron-renderer',

登录后复制

这句配置曾在2-7其它配置项-Target中提到,意思是指让 Webpack 构建出用于 Electron 渲染进程用的 JavaScript 代码,也就是这2个窗口需要的网页代码。

以上修改都完成后重新执行 Webpack 构建,对应的网页需要的代码都输出到了项目根目录下的 dist 目录里。

为了以 Electron 应用的形式运行,还需要安装新依赖:

# 安装 Electron 执行环境到项目中npm i -D electron

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

Angular实现可添加删除与计算总金额效果插件

Bootstrap模态框多次弹出提交BUG

以上就是Webpack如何构建Electron应用的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2772802.html

(0)
上一篇 2025年3月8日 13:32:52
下一篇 2025年3月8日 13:32:57

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Webpack怎么优化配置文件

    这次给大家带来Webpack怎么优化配置文件,Webpack优化配置文件的注意事项有哪些,下面就是实战案例,一起来看一下。 Webpack 启动后会从配置的 Entry 出发,解析出文件中的导入语句,再递归的解析。 在遇到导入语句时 Web…

    编程技术 2025年3月8日
    000
  • vue-cli+webpack怎样搭建vue开发环境

    这次给大家带来vue-cli+webpack怎样搭建vue开发环境,vue-cli+webpack搭建vue开发环境的注意事项有哪些,下面就是实战案例,一起来看一下。 在这里我们需要首先下载node,因为我们要用到npm包下载,是基于nod…

    编程技术 2025年3月8日
    200
  • vue-cli操作Webpack环境配置

    这次给大家带来vue-cli操作Webpack环境配置,vue-cli操作Webpack环境配置的注意事项有哪些,下面就是实战案例,一起来看一下。 Vue之所以现在如此之火热,一部分也得益于有官方的脚手架生成工具Vue-cli,大大简化了初…

    编程技术 2025年3月8日
    200
  • vue2-webpack2的框架怎么搭建

    这次给大家带来vue2-webpack2的框架怎么搭建,vue2-webpack2框架搭建的注意事项有哪些,下面就是实战案例,一起来看一下。 react、vue、angular代表了3种前端工程化的思想,学习三大框架主要是理解它们的核心概念…

    编程技术 2025年3月8日
    200
  • Webpack框架使用总结

    这次给大家带来Webpack框架使用总结,Webpack框架使用的注意事项有哪些,下面就是实战案例,一起来看一下。 webpack是什么 webpack是一个前端构建的打包工具(并不是什么库或框架), 它能把各种资源,例如JS(含JSX)、…

    编程技术 2025年3月8日
    200
  • webpack怎么提取第三方库

    这次给大家带来webpack怎么提取第三方库,webpack提取第三方库的注意事项有哪些,下面就是实战案例,一起来看一下。 我们在用webpack打包是时候,常常想单独提取第三方库,把它作为稳定版本的文件,利用浏览缓存减少请求次数。常用的提…

    编程技术 2025年3月8日
    200
  • webpack构建多页面应用的步骤分析

    这次给大家带来webpack构建多页面应用的步骤分析,webpack构建多页面应用的注意事项有哪些,下面就是实战案例,一起来看一下。 关于webpack的配置和使用,网上已经有许多文章了,大多是在讲单页应用,当我们需要打包多个html时,事…

    编程技术 2025年3月8日
    200
  • 在Webstorm中怎么使用babel让ES6转成ES5

    这次给大家带来在Webstorm中怎么使用babel让ES6转成ES5,在Webstorm中使用babel让ES6转成ES5的注意事项有哪些,下面就是实战案例,一起来看一下。 前言:ECMAScript 6是注意事项语言的下一代标准,已经在…

    编程技术 2025年3月8日
    200
  • node.js实现web终端操作多用户

    这次给大家带来node.js实现web终端操作多用户,node.js实现web终端操作多用户的注意事项有哪些,下面就是实战案例,一起来看一下。 terminal(命令行)作为本地IDE普遍拥有的功能,对项目的git操作以及文件操作有着非常强…

    编程技术 2025年3月8日
    200
  • 怎么优化webpack配置

    这次给大家带来怎么优化webpack配置,优化webpack配置的注意事项有哪些,下面就是实战案例,一起来看一下。 最近的项目度过了开始忙碌的基建期,也慢慢轻松下来,准备记录一下自己最近webpack优化的措施,希望有温故知新的效果。 项目…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论