electron入门

1. 简介

  • 官网
  • Electron 是由 GitHub 众多开发者开发的一个开源项目,能够使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序

2. 五分钟快速上手

2.1 安装 electron

初始化 package.json 文件

  • npm init

安装 electron

  • cnpm I electron –S

2.2 配置为入口文件

{
  "name": "electron-demo",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "electron ."
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "electron": "^8.3.0"
  }
}

2.3 创建 main.js 文件

const electron = require("electron");
// 控制应用程序的事件生命周期。
const app = electron.app;
// 当 Electron 完成初始化时,触发一次
app.on("ready", () => {
  new electron.BrowserWindow({
    width: 800,
    height: 300,
  });
});

2.4 创建窗口

app.on("ready", () => {
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 500,
  });

  mainWindow.loadFile("./index.html");
});

3. 自动刷新页面

  • 安装插件

    cnpm install --save-dev electron-reloader
    
  • 在入口引入插件

    const reloader = require("electron-reloader");
    reloader(module);
    

4. 主进程和渲染进程

Electron 运行 package.jsonmain 脚本的进程被称为主进程。 在主进程中运行的脚本通过创建 web 页面来展示用户界面。 一个 Electron 应用总是有且只有一个主进程。

由于 Electron 使用了 Chromium 来展示 web 页面,所以 Chromium 的多进程架构也被使用到。 每个 Electron 中的 web 页面运行在它的叫渲染进程的进程中。

在普通的浏览器中,web 页面无法访问操作系统的原生资源。 然而 Electron 的用户在 Node.js 的 API 支持下可以在页面中和操作系统进行一些底层交互。

ctrl+shift+i 打开渲染进程调试

默认打开调试

app.on("ready", () => {
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 500,
  });

  mainWindow.loadFile("./index.html");

  const mainWindow2 = new BrowserWindow({
    width: 800,
    height: 500,
  });

  mainWindow.webContents.openDevTools();

  mainWindow2.loadFile("./index2.html");
});

5. 自定义原生菜单

5.1 自定义菜单

详细文档:https://www.electronjs.org/docs/api/menu

const electron = require("electron");

const { app, Menu } = electron;
const template = [
  {
    label: "文件",
    submenu: [
      {
        label: "新建窗口",
      },
    ],
  },
  {
    label: "编辑",
    submenu: [
      {
        label: "新建窗口",
      },
    ],
  },
];
const menu = Menu.buildFromTemplate(template);

Menu.setApplicationMenu(menu);

5.2 给菜单定义点击事件

1、点击打开新窗口

submenu: [
  {
    label: "新建窗口",
    click: () => {
      const newMainWindow = new BrowserWindow({
        width: 300,
        height: 300,
      });
      newMainWindow.loadFile("./new.html");
    },
  },
];

2、点击打开浏览器

shell 模块提供了集成其他桌面客户端的关联功能.

const { BrowserWindow, Menu, shell } = require("electron");
const template = [
  {
    label: "文件",
    submenu: [
      {
        label: "文件1",
        click() {
          // 点击打开新窗口
          const mainWindow2 = new BrowserWindow({
            width: 600,
            height: 600,
          });

          mainWindow2.loadFile("./index.html");
        },
      },
    ],
  },
  {
    label: "csdn",
    click() {
      // 点击打开浏览器
      shell.openExternal("https://www.csdn.net/");
    },
  },
];

5.3 抽离菜单定义

const { BrowserWindow, Menu } = require("electron");
const template = [
  {
    label: "文件",
    submenu: [
      {
        label: "新建窗口",
        click: () => {
          const newMainWindow = new BrowserWindow({
            width: 300,
            height: 300,
          });
          newMainWindow.loadFile("./new.html");
        },
      },
    ],
  },
  {
    label: "编辑",
    submenu: [
      {
        label: "新建窗口",
      },
    ],
  },
];
const menu = Menu.buildFromTemplate(template);

Menu.setApplicationMenu(menu);
require("./menu");
打开调式

mainWindow.webContents.openDevTools()

5.4 自定义顶部菜单

  • 通过 frame 创建无边框窗口

    const mainWindow = new electron.BrowserWindow({
      frame: false,
    });
    
  • 自定义窗口

    <div class="custom-menu">
      <ul>
        <li>新建窗口</li>
        <li>关于我们</li>
      </ul>
    </div>
    
    * {
      margin: 0;
      padding: 0;
    }
    .custom-menu {
      height: 50px;
      width: 100%;
      background: pink;
    }
    
    .custom-menu ul {
      list-style: none;
    }
    
    .custom-menu ul li {
      float: left;
      width: 50px;
      line-height: 50px;
      text-align: center;
      margin-left: 10px;
    }
    

    添加-webkit-app-region: drag;实现拖拽

5.5 点击创建新窗口

// html
<li class="new-window">新建窗口</li>;

// js
// remote 通过remote使用主进程的方法
const {
  remote: { BrowserWindow },
} = require("electron");
const newWindow = document.querySelector(".new-window");
newWindow.onclick = function () {
  new BrowserWindow({
    width: 200,
    height: 300,
  });
};

能够在 html 中使用 node 方法

const mainWindow = new BrowserWindow({
  width: 800,
  height: 500,
  webPreferences: {
    // 开启node模块
    nodeIntegration: true,
    // 开启remote模块
    enableRemoteModule: true,
  },
});

5.6 点页面打开浏览器

  • html

    <a id="a1" href="https://www.itheima.com">打开浏览器</a>
    
  • js

    const { shell } = require("electron");
    const allA = document.querySelectorAll("a");
    
    allA.forEach((item) => {
      item.onclick = function (e) {
        e.preventDefault();
        console.log(item);
        shell.openExternal(item.href);
      };
    });
    

6. 打开对话框读取文件

6.1 读取文件

  • 定义点击事件

    <button onclick="openFile()">打开</button>
    
  • 定义事件函数

    打开对话框文档:https://www.electronjs.org/docs/api/dialog

    // 打开对话框
    function openFile() {
      const res = dialog.showOpenDialogSync({
        title: "选择文件",
        buttonLabel: "哈哈",
        filters: [{ name: "Custom File Type", extensions: ["js"] }],
      });
    
      const fileContent = fs.readFileSync(res[0]);
      dropEl.innerText = fileContent;
    }
    

6.2 保存文件

  • 定义点击事件

    <button onclick="saveFile()">保存</button>
    
  • 事件函数

    // 保存对话框
    function saveFile() {
      const res = remote.dialog.showSaveDialogSync({
        title: "保存文件",
        buttonLabel: "保存文件",
        filters: [{ name: "index", extensions: ["js"] }],
      });
      fs.writeFileSync(res, dropEl.value);
    }
    

7. 定义快捷键

7.1 主线程定义

  • 引入

    const { app, BrowserWindow, globalShortcut } = require("electron");
    
  • 在 ready 中注册快捷键

    const ret = globalShortcut.register("CommandOrControl+X", () => {
      console.log("CommandOrControl+X is pressed + 打印结果在命令行");
    });
    
  • 定义快捷键最大、最小、关闭窗口

    globalShortcut.register("CommandOrControl+T", () => {
      mainWindow.unmaximize();
    });
    globalShortcut.register("CommandOrControl+H", () => {
      mainWindow.close();
    });
    globalShortcut.register("CommandOrControl+M", () => {
      mainWindow.maximize();
    });
    

7.2 渲染进程定义

  • 通过 remote 注册

    // 定义快捷键
    remote.globalShortcut.register("Ctrl+O", () => {
      console.log("ctrl+o");
    });
    

8. 渲染进程和主线程通讯

  • 定义按钮

    <div class="maxWindow no-drag" onclick="maxWindow()"></div>
    
  • 事件函数

    function maxWindow() {
      ipcRenderer.send("max-window");
    }
    
  • 主线程定义事件

    ipcMain.on("max-window", () => {
      mainWindow.maximize();
    });
    
  • 传参

    let windowSize = "unmax-window";
    function maxWindow() {
      windowSize = windowSize === "max-window" ? "unmax-window" : "max-window";
      ipcRenderer.send("max-window", windowSize);
    }
    
  • 接收参数

    ipcMain.on("max-window", (event, arg) => {
      console.log(arg);
      if (arg === "unmax-window") return mainWindow.maximize();
      mainWindow.unmaximize();
    });
    

09. electron 打包

  • 安装 electron-packager

    cnpm i electron-packager -D
    
  • 添加打包任务

    "build": "electron-packager ./ HelloWorld --platform=win32 --arch=x64 --out ./outApp --overwrite --icon=./favicon.ico"
    

10 .electron 结合框架开发

  • 利用 vue 脚手架初始化项目

  • 在项目中安装 electron

    cnpm i electron

  • 添加 electron 启动配置

    "main": "main.js",
    "scripts": {
       "start": "react-scripts start",
       "build": "react-scripts build",
       "test": "react-scripts test",
       "eject": "react-scripts eject",
       "electron": "electron ."
      },
    
  • 配置 main.js

    const { app, BrowserWindow } = require("electron");
    
    function createWindow() {
      // Create the browser window.
      const mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
      });
      // Open the DevTools.
      // mainWindow.webContents.openDevTools()
    }
    
    app.on("ready", () => {
      createWindow();
    });
    
  • 加载 vue 项目

    mainWindow.loadURL("http://localhost:3000/");
    

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Electron 入门指的是学习如何使用 Electron 框架来开发跨平台的桌面应用程序。首先需要了解 Electron 的基本概念和架构,包括主进程和渲染进程、应用程序的生命周期等。然后需要学习如何使用 HTML、CSS 和 JavaScript开发界面和逻辑,并且掌握 Electron 提供的 API 来访问操作系统的底层功能,比如文件系统、网络、窗口管理等。最后需要了解如何打包和发布应用程序,以及如何调试和测试应用程序。 ### 回答2: Electron 是一个用于构建跨平台桌面应用程序的开源框架。它使用 HTML、CSS 和 JavaScript 来创建桌面应用程序,并且可以在不同的操作系统上运行,如 Windows、Mac 接来和 Linux。 学习 Electron 入门可以按照以下步骤进行: 1. 准备开发环境:首先要安装 Node.js 和 npm,它们用于安装 Electron。可以在官方网站上下载并安装最新版本的 Node.js。安装完成后,打开终端或命令提示符窗口,运行命令 `npm install -g electron` 安装 Electron。 2. 创建一个新项目:在合适的目录下创建一个新的文件夹作为项目文件夹。在终端或命令提示符中,切换到项目文件夹,并运行命令 `npm init` 创建一个新的 npm 项目。按照提示一步一步地填写项目信息。完成后,会生成一个 `package.json` 文件,用于管理项目依赖和配置。 3. 安装必要的依赖:现在,需要安装 Electron 的依赖。在终端或命令提示符中运行命令 `npm install electron --save-dev` 安装 Electron。 4. 编写主进程代码:在项目文件夹中创建一个新的 JavaScript 文件,作为 Electron 的主进程代码。主进程代码负责启动应用程序并管理窗口。 5. 编写页面代码:创建一个新的 HTML 文件,用于作为应用程序的主页面。 6. 运行 Electron:在终端或命令提示符中,切换到项目文件夹,并运行命令 `electron .` 启动应用程序。应用程序的窗口将会显示出来,同时运行主进程和页面代码。 通过上述步骤,可以快速入门 Electron,并开始构建跨平台桌面应用程序。可以通过学习 Electron 的文档、示例代码和社区资源深入了解和掌握 Electron 的更多特性和功能。 ### 回答3: electron是一种跨平台的开源桌面应用程序框架,可用于构建基于HTML、CSS和JavaScript的桌面应用程序。它通过将现代Web技术与Node.js的强大功能相结合,提供了一种简单而又强大的方式来开发可在Windows、Mac和Linux上运行的桌面应用程序。 要入门electron,首先需要安装electron开发环境。可以通过npm(Node.js的包管理器)来安装所需的工具和依赖项。然后,创建一个新的electron项目,并安装electron所需的依赖包。接下来,可以使用任何常见的Web开发工具(如HTML、CSS和JavaScript)来进行应用程序的开发。 在electron中,应用程序的主进程由一个main.js文件来控制,而渲染进程由HTML和JavaScript文件来控制。通过main.js文件,可以创建一个主窗口并控制窗口的行为。在渲染进程中,可以使用Web技术来构建应用程序的用户界面,例如使用HTML构建页面结构,使用CSS样式化页面,使用JavaScript实现交互和动态效果。 electron还提供了许多API和功能,使开发者能够与底层操作系统进行交互,例如访问文件系统、显示原生对话框、打开外部链接等。此外,electron还支持构建可打包为独立安装包的应用程序,以便更方便地在不同操作系统上分发和部署应用程序。 总的来说,入门electron需要安装开发环境,创建项目,使用常见的Web技术进行开发,并利用electron提供的API和功能来构建强大的跨平台桌面应用程序。由于其简单易用的特点,electron已成为许多开发者喜爱的桌面应用程序开发框架之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源刃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值