Electron将Web页面打包成桌面应用实例

2023-11-17

上一篇文章 Electron-vue脚手架改造vue项目 介绍了如何将Vue项目构建成桌面应用的方法。

这篇文章将继续介绍Electron构建桌面项目,不仅仅局限于Vue项目,使用Vue项目做案例,只是目前做的Vue项目比较多,拿其中一个练手比较方便。

 事实是,将项目打包成桌面应用跟使用什么前端框架没有关系,通过Electron任何项目都能打包成桌面应用 

electron官网:https://electronjs.org/docs/tutorial/first-app

入门:electron-quick-start如何快速启动一个Electron桌面程序?

通过启动一个官网的Electron案例,快速了解入门

克隆一个Electron官网推荐的快速启动程序,简单了解Electron构建桌面程序的流程

git clone https://github.com/electron/electron-quick-start
cd electron-quick-start
npm install // 或者 yarn install
npm start

clone项目到本地,目录结构为:

 

项目跑起来之后,可以看到欢迎界面

重点关注main.jspackage.jsonindex.html这几个文件

在入口文件main.js中,这段代码就是配置桌面端应用的入口

mainWindow.loadFile('index.html') // 方法一
mainWindow.loadURL(url.format({ // 方法二
  pathname: path.join(__dirname, 'index.html'),
  protocol: 'file:',
  slashes: true
}))
mainWindow.loadURL('https://www.baidu.com') // 方法三

三种方式任选其一,方法一中 mainWindow.loadFile() 方法可以读取本地网页,方法二是将本地网址稍做转义,方法三中 mainWindow.loadURL() 方法可以写入线上地址。

不难猜测,只要将网页地址写入 loadFile() 方法或者 loadURL() 方法之后,运行 npm start  命令,就能构建一个桌面应用啦。

了解完Electron的基本流程,如果想把Vue项目跑在桌面应用上,只要先将Vue应用打包,将打包之后的文件(默认在dist目录文件夹下)拷贝到当前 electron-quick-start 目录替换 index.html,继续运行 npm start 。

可能出现白屏,不用太担心,Vue项目打包的时候默认使用绝对路径,进入Vue项目/config/index.js修改构建路径就OK啦

build: {
    index: path.resolve(__dirname, '../dist/index.html'),
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',
    assetsPublicPath: './', // 将默认的绝对路径修改成相对路径哦
    productionSourceMap: true,
    devtool: '#source-map',
    productionGzip: false,
    productionGzipExtensions: ['js', 'css'],
    bundleAnalyzerReport: process.env.npm_config_report
}

再次运行项目,就能成功显示Vue桌面项目。

如果每次都是通过electron-quick-start为基础,再将Vue项目打包,拷贝到对应位置,会比较麻烦,接下来就介绍如何将Electron引入Vue项目

如何在Vue项目中直接使用Electron?

在介绍如何在Vue项目中引用Electron之前,先明确electron-quick-start是如何运行起来的。

从 package.json 文件看起,我们运行 npm start 命令 其实是 运行了 electron . 命令,该命令会从当前目录文件中寻找 package.json 文件,找到 package.json 文件 然后读取 package.json 文件 中的 main 值main值 指向 main.js文件,然后运行 man.js 文件,找到index.html文件,创建桌面应用实例。

{
  "name": "electron-quick-start",
  "version": "1.0.0",
  "description": "A minimal Electron application",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "repository": "https://github.com/electron/electron-quick-start",
  "keywords": [
    "Electron",
    "quick",
    "start",
    "tutorial",
    "demo"
  ],
  "author": "GitHub",
  "license": "CC0-1.0",
  "devDependencies": {
    "electron": "^2.0.0"
  }
}

了解了Electron启动步骤,接下来就介绍如何将Electron引入Vue项目

步骤一:安装Electron依赖包

npm install electron --save-dev 

步骤二:将 electron-quick-start 项目中的 main.js 搬到vue项目根目录,可以改个名字叫 .electron.js ,其实放到哪和叫什么名字大家随意,只要找得到,看的明白就行

步骤三:步骤二中的main.js(重命名为 .electron.js,以下都叫做 .electron.js 文件)入口文件位置改变,其中读取index.html文件的地址也要随之改变,也就是改成Vue项目打包之后dist/index.html目录

mainWindow.loadURL(url.format({
   pathname: path.join(__dirname, '../dist/index.html'),
   protocol: 'file:',
   slashes: true
}))

步骤四:在package.json文件中增加一条指令,用来启动Electron桌面应用

"scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node build/build.js",
    "electron_dev": "npm run build && electron .electron.js"
    // electron是命令 .electron.js是文件 该命令是指用electron运行.electron.js文件,即运行入口文件
}

npm run electron_dev 命令就可以启动Electron桌面应用,在此之前需要确保项目当中已经有构建好的静态资源文件,因此 在运行 electron .electron.js 之前 需要先运行 npm run build。

在命令行中,运行 npm run electron_dev之后,就能显示当前Vue项目的桌面程序。

若采用electron-quick-start 项目中启动方式,需调整如下:(注意调整了electron_dev命令,增加了main参数)

"main": ".electron.js",
"scripts": {
  "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
  "start": "npm run dev",
  "build": "node build/build.js",
  "electron_dev": "npm run build && electron ." // electron . 运行一个目录,这个目录必须遵循node模块规范
}

electron . 命令运行当前目录并读取 package.json main值 运行 main值 中的文件

在此,我们介绍了两种Electron运行方式, electron . 和 electron .electron.js

// 直接运行入口文件
electron .electron.js
// 从当前目录寻找 package.json 文件,读取文件中的 main值,运行 main值 中的文件,main值 中的文件其实就是 .electron.js 入口文件
electron .

还有第三种运行方式,electron ,

electron

没有参数的时候默认是运行当前的 resources/app 目录或者resources/app.asar

(.asar是一种压缩文件,详情参考官网),这两个都不存在的时候运行resources/default_app

步骤五:在实际项目开发中,这样操作也是比较麻烦的,每次修改之后都需要重新运行 npm run electron_dev 命令,可行的办法是,修改 .electron.js文件 ,监听 npm run dev 启动之后的地址

mainWindow.loadURL('http://localhost:8080/' + '#')

此时就需要启动两个服务,一个 electron .  ,一个 npm run dev

如何打包成.exe文件?electron-packager打包Electron

步骤一:增加一条启动命令,(先安装好npm install electron-packager --save-dev哦!)

"main": ".electron.js", // 不要忘记设置入口文件
"scripts": {
    "electron_build": "electron-packager ./ --platform=win32 --arch=x64 --overwrite"
    // 注意事项 electron-packager ./ 会取当前目录下packager.json文件(即当前文件)中main值指向的入口文件
}

关于 electron-packager 的配置,简单介绍一下。 

语法:electron-packager <sourcedir> <appname> –platform=<platform> –arch=<arch> [optional flags…]

    1. sourcedir 资源路径,在本例中既是./dist/
    2. appname 打包出的exe名称
    3. platform 平台名称(windows是win32)
    4. arch 版本,本例为x64

    5. [optional flags…] 配置项选填,可以设置二进制打包等,默认没有这些

步骤二:运行打包命令

npm run electron_build

步骤三:在文件目录下可以找到callcenter-win32-x64文件夹

双击运行.exe文件就能看到熟悉的界面啦

更多Electron 打包方式:electron打包:electron-packager及electron-builder两种方式实现桌面端应用程序打包

与君共勉:再牛逼的梦想,也抵不住傻逼般的坚持!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Electron将Web页面打包成桌面应用实例 的相关文章

随机推荐

  • python测量线长

    模块 matplotlib PIL time math win32con threading 代码 mian py from PIL import Image import matplotlib pyplot as plt from ima
  • 如何使用git 生成patch 和打入patch

    平时我们在使用git 管理项目的时候 会遇到这样一种情况 那就是客户使用git 生成patch 给到我们 那我们就需要把客户给到patch 打入到我们的project 基于这样一个场景 我把git 如何生成patch 和如何打入patch
  • discuz如何进行邮件配置

    需求 discuz能使用本站域名的邮件后缀发送邮件 思路 使用腾讯企业邮 通过DNS的MX记录绑定本站域名 最后通过腾讯企业邮小程序获取到该账号的客户端专用密码 获取到客户端专用密码后 回到discuz后台进行设置 如下 按字格式进行填写
  • 如何存储10亿的数据

    最近突然想到这么一个问题 假如有 lt 10亿的数据 每个数据不重复 同时是无序 不连续的 如何使用最小的空间来存储来这么多数据 同时又能快速的确认哪个数据有没有 直接存储10亿个数据 一个int的类型 可以最大可以表示 214748364
  • Esper

    Esper Esper 的网址是 http esper codehaus org 我们可以访问该网站首页 有几种典型的应用最需要 Esper 我摘录如下 Business process management and automation
  • ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小

    昨天遇到一个问题 ORA 22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小 去找问题时候 发现是sql查询语句的to char方法将clob类型转换成varchar类型出了问题 oracle中var
  • Unity中贴图的导入

    Preferences中的Compress Assets on Import是决定资源导入时是否压缩资源 对于贴图资源来说 就是决定导入时是否压缩贴图 而TextureImporter中的贴图格式决定的是贴图的压缩格式 一个是导入 重新导入
  • 青龙2.10.13 稳定版+对接傻妞教程+短信登录+傻妞WEB控制台 超级详细

    此文章引用大佬的教程 进行更详细的阐述 如有疑问请进交流群332461037 我用的系统是centos7 6 目录 一 重装系统 1 选择centos7 6系统 2 重置服务器密码 3 服务器开放端口 二 ssh工具远程连接服务器 1 下载
  • 固件库编程:关于core_cm3.c的错误

    固件库编程 关于core cm3 c的错误 然后编译发现如下错误和警告 CMSIS CM3 core cm3 c 445 error non ASM statement in naked function is not supported
  • 基础算法:高精度除法

    高精度除法 题目条件 除数一定不为0 include
  • Numpy 索引 排序

    numpy argmax 和 numpy argmin numpy argmax 和 numpy argmin 函数分别沿给定轴返回最大和最小元素的索引 实例 numpy sort numpy sort 函数返回输入数组的排序副本 函数格式
  • Spring学习(三)--声明式事务&常用注解

    1 前言 这篇文章用来整理spring中的事务管理机制 声明式事务和常用的注解 一般的事务管理分为两种 编程式事务和声明式事务 spring提供声明式事务的支持 这样在我们操作数据库时更加方便 2 声明式事务 声明式事务是在AOP的基础上实
  • Ubuntu16.04+GTX1060mq(驱动版本430.64)安装CUDA10.0

    Ubuntu16 04 GTX1060mq 驱动版本430 64 安装CUDA10 0 CUDA下载 cuda最新版本下载地址 可在该页面进入历史版本下载 https developer nvidia com cuda downloads
  • 环境+代理配置+模块化

    1 模块化知识补充 1 1 模块化的基础 1 引入目录 默认引入目录中的index js文件 vuex modules a js b js index js 引入a js 引入 b js import store from vuex 是vu
  • Flutter(一)之Flutter的的简单入门分析

    前言 Flutter诞生于2018年 谷歌出品 应该是属于最新的移动跨平台开发框架了 从React Native自身框架的一些问题导致的用户量降低后 有很多小伙伴便转战Flutter战场 Flutter作为最新的跨移动平台开发框架 自然是汲
  • 使用Python,matplotlib绘制Nomogram列线图

    使用Python matplotlib绘制Nomogram列线图 1 效果图 2 源码 参考 这篇博客将介绍如何使用Python matplotlib绘制列线图 写这篇博客源于博友的提问 期望使用matplotlib绘制列线图如下 翻官网文
  • 浏览器访问.m3u8文件

    浏览器播放m3u8文件
  • PostgreSQL - tablefunc

    文章目录 创建扩展 tablefunc函数 1 normal rand 产生一个正态分布随机值 高斯分布 的集合 2 crosstab 行转列 1 3 crosstab 行转列 2 4 connectby 官方文档地址 创建扩展 creat
  • 关于 android 远程控制(pc 控制手机)

    因为手机的触屏有问题 需要通过pc来控制手机 试用 vnc viewer 没有成功 而且它是基于 wifi 的 然后不放弃 继续查找 终于发现 androidscreencast Desktop app to control an andr
  • Electron将Web页面打包成桌面应用实例

    上一篇文章 Electron vue脚手架改造vue项目 介绍了如何将Vue项目构建成桌面应用的方法 这篇文章将继续介绍Electron构建桌面项目 不仅仅局限于Vue项目 使用Vue项目做案例 只是目前做的Vue项目比较多 拿其中一个练手