Electron快速上手并将网站直接生成桌面应用

简介: Electron快速上手并将网站直接生成桌面应用

介绍

使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序
  • 基于 Chromium 和 Node.js
  • 让你可以使用 HTML, CSS 和 JavaScript 构建应用
  • 开源
  • 跨平台(Windows、Mac、Linux)

Atom、Postman、Notion、Vscode等都是用Electron开发的

快速上手

手动

1.创建文件并初始化

mkdir Hello-world && cd Hello-world
npm init -y

记得修改入口文件,并在根目录创建入口文件 main.js

// package.json
{
  ...
  "main": "main.js",
  ...
}

2.安装electron依赖

npm install --save-dev electron

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

// package.json
{
  "scripts": {
    "start": "electron ."
  }
}

4.运行

npm start

5.空白是因为并没有任何内容,写个 HTML

<!-- index.html -->
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    <p>Welcome to your Electron application.</p>
  </body>
</html>

6.修改主入口main.js代码

// 在文件头部引入 Node.js 中的 path 模块
const path = require('path')

// app:控制应用程序事件生命周期的模块
// BrowserWindow:创建和管理应用程序窗口模块
const { app, BrowserWindow } = require('electron')

function createWindow () {
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  })

  mainWindow.loadFile('index.html')

  // 打开开发工具
  mainWindow.webContents.openDevTools()
}

// 在 Electron 中,只有在 app 模块的 ready 事件被激发后才能创建浏览器窗口
// 类似vue 的生命周期 将会在 Electron 结束后初始化
app.whenReady().then(() => {
  createWindow()

// Mac 逻辑 关闭只是隐藏 command + Q 才完全退出
  app.on('activate', function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// Windows 和 linux 关闭窗口会完全退出窗口
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

脚手架

# 克隆示例项目的仓库
git clone https://github.com/electron/electron-quick-start

# 进入这个仓库
cd electron-quick-start

# 安装依赖并运行
npm install && npm start

如果安装过慢可以设置淘宝源

最新淘宝源地址:

# Npm 设置淘宝源
npm config set registry https://registry.npmmirror.com/

# 检查是否修改成功

npm config get registry

使用淘宝源运行时如果提示这个错误

地址问题
throw new Error('Electron failed to install correctly, please delete node_modules/electron and try installing again')

则设置electron 镜像源地址

npm config set electron_mirror https://cdn.npm.taobao.org/dist/electron/

打包

注意: 图标格式 Windows 下使用的 icon.ico Mac 使用的是 icon.icns

使用electron-forge

安装

npm install --save-dev @electron-forge/cli
npx electron-forge import

使用

npm run make

打包参数配置 package.json文件里的config => forge => packagerConfig

使用electron-packager

安装

npm install --save-dev electron-packager

使用

npx electron-packager <sourcedir> <appname> --platform=<platform> --arch=<arch> [optional flags...]

具体参数:https://github.com/electron/electron-packager

将网站直接生成桌面应用

用上面手动或者脚手架的方式创建初始化文件

修改 main.js

const { app, BrowserWindow, Menu } = require('electron')

function createWindow() {
  const win = new BrowserWindow({
    autoHideMenuBar: true,
    show: false, // 是否显示窗口,否后,通过对象.show()打开
    fullscreen: false,
  })

  /**
   * 优化加载方式 当页面在窗口中直接加载时,用户会看到未完成的页面,
   * 这不是一个好的原生应用的体验,使用此事件后显示窗口将没有视觉闪烁
   */
  win.on('ready-to-show', () => {
    win.show()
  })
  //生成调试工具栏
  // win.webContents.openDevTools()
  // 窗口最大化
  win.maximize()
  // 加载远程URL(网址)
  win.loadURL('https://www.iyouhun.com/')
  // 设置菜单栏
  const template = [
    {
      label: '文件',
      submenu: [
        {
          label: '关于',
          role: 'about',
        },
        {
          label: '关闭',
          accelerator: 'Command+Q',
          click: () => {
            win.close()
          },
        },
      ],
    },
  ]
  const menu = Menu.buildFromTemplate(template)
  Menu.setApplicationMenu(menu)
}

app.on('ready', createWindow)

// Windows 和 linux 关闭窗口会完全退出窗口
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

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

Electron的优缺点

优点

  • 原生的接口(菜单、消息提醒、系统托盘等)。
  • 上手难度低,能够使用react、vue等前端框架,能方便地迁移前端组件,构建出漂亮的桌面应用。
  • 方便热更新
  • 调试和测试方便
  • Electron使用node.js。因此,您可以导入Chrome应用程序中不容易使用的许多模块
  • Electron文档要好得多

缺点

  • 不适合开发轻量级的应用。即使一个electron的项目框架,也包含chromium内核。
  • 相比c++开发的桌面应用,性能远远不如后者。
  • 启动速度慢。
  • 每个窗口都是一个新的进程,占据大量内存。

Electron和 PWA

  • 可用性

    • Electron 不能安装在任何设备
    • PWA 只要有网有浏览器记性,甚至不需要网络
  • 性能

    • PWA具有更好性能,使用 Service Worker,减少加载时间
  • 占用空间

    • Electron包过大,毕竟每个包都包含了包含chromium内核
  • 安全性

    • Electron包不加任何混淆加密的话是完全可读的,因为存放在本地
    • PWA存放在服务端且只能通过HTTPS传输
  • 更新和集成

    • 两者都可以做到服务端异步更新
  • 交互

    • Electron可以调用原生的接口

Electron和Flutter

  • 上手难度

    • Electron:会基础的HTML、CSS、JS即可
    • Flutter:需学习Dart语言
  • 侧重点

    • Electron更偏向PC端应用
    • Flutter更偏向移动端应用
目录
相关文章
|
2月前
|
资源调度 运维 JavaScript
使用electron创建桌面应用及常见打包错误解决
使用electron创建桌面应用及常见打包错误解决
267 3
|
3月前
|
缓存 JavaScript 前端开发
高效打造跨平台桌面应用:Electron加载服务器端JS
【9月更文挑战第17天】Electron 是一个基于 Chromium 和 Node.js 的开源框架,允许使用 HTML、CSS 和 JavaScript 构建跨平台桌面应用。加载服务器端 JS 可增强应用灵活性,实现代码复用、动态更新及实时通信。通过 HTTP 请求、WebSocket 或文件系统可实现加载,但需注意安全性、性能和兼容性问题。开发者应根据需求选择合适方法并谨慎实施。
148 3
|
2月前
|
开发框架 JavaScript 前端开发
Electron技术深度解析:构建跨平台桌面应用的利器
【10月更文挑战第13天】Electron技术深度解析:构建跨平台桌面应用的利器
200 0
|
4月前
|
容器 iOS开发 Linux
震惊!Uno Platform 响应式 UI 构建秘籍大公开!从布局容器到自适应设计,带你轻松打造跨平台完美界面
【8月更文挑战第31天】Uno Platform 是一款强大的跨平台应用开发框架,支持 Web、桌面(Windows、macOS、Linux)及移动(iOS、Android)等平台,仅需单一代码库。本文分享了四个构建响应式用户界面的最佳实践:利用布局容器(如 Grid)适配不同屏幕尺寸;采用自适应布局调整 UI;使用媒体查询定制样式;遵循响应式设计原则确保 UI 元素自适应调整。通过这些方法,开发者可以为用户提供一致且优秀的多设备体验。
173 0
|
4月前
|
前端开发 JavaScript API
强强联手打造桌面应用新标杆:Angular与Electron的完美融合——从环境搭建到通信机制,全面解析构建跨平台应用的最佳实践与技巧
【8月更文挑战第31天】随着Web技术的进步,开发者们越来越多地采用Web技术来构建桌面应用程序。通过结合使用开源框架Electron及前沿的前端框架Angular,开发者能充分利用JavaScript、HTML和CSS打造出高性能且易维护的跨平台桌面应用。本文将详细介绍如何搭建基于Angular与Electron的开发环境,包括创建Angular项目、安装Electron及相关依赖、配置Electron主进程以及实现Angular应用与Electron间的通信等关键步骤,并最终将应用打包成多平台可执行文件,为读者提供了一套完整的解决方案以快速入门并实践这一强大技术组合。
135 0
|
7月前
|
JavaScript 前端开发 安全
【TypeScript技术专栏】TypeScript在Electron桌面应用中的实践
【4月更文挑战第30天】本文介绍了如何在Electron桌面应用中采用TypeScript以提升代码质量和可维护性。Electron利用Chromium和Node.js让前端开发者能创建桌面应用,而TypeScript的强类型系统和高级语言特性有助于管理复杂项目。通过初始化项目、安装依赖、配置TypeScript、编写主进程和渲染进程代码,开发者可以在Electron中实践TypeScript。一个简单的文本编辑器案例展示了TypeScript在确保类型安全方面的优势。尽管有学习成本,但TypeScript对大型Electron项目来说是值得的。
450 0
|
7月前
|
JavaScript 前端开发 API
如何利用JavaScript和Electron构建具有丰富功能的桌面应用
【4月更文挑战第30天】如何利用JavaScript和Electron构建具有丰富功能的桌面应用
36 0
|
7月前
|
前端开发 数据可视化 iOS开发
基于electron快速将任意网站打包成跨平台的桌面端软件
基于electron快速将任意网站打包成跨平台的桌面端软件
232 1
|
JavaScript 前端开发 Linux
Vue.js + Electron 的跨平台桌面应用程序开发
本文介绍了 Vue.js 和 Electron 的基本特点和原理,并分析了它们在桌面应用程序开发中的优势和应用场景。在基于 Vue.js 和 Electron 的桌面应用程序开发实践中,本文详细介绍了项目的搭建和配置,包括环境的准备、项目的初始化和依赖的安装等步骤。然后,本文介绍了使用 Vue.js 进行界面设计和组件开发的方法,并提供了相关的示例代码和实现细节。接下来,本文探讨了 Electron 主进程和渲染进程的开发,包括窗口管理、文件系统访问和与底层系统交互等方面的内容。最后,本文对基于 Vue.js 和 Electron 的桌面应用程序开发做出了总结,并展望了未来的发展方向和应用前景
844 2
|
开发框架 自然语言处理 开发者
多端/跨端/融合的桌面应用之Electron
Electron作为一种跨平台桌面应用开发框架,以其出色的用户体验和丰富的功能,深受广大开发者的喜爱。
302 1