因为信奉一句话:JavaScript 终将一统天下,所以要想方设法开疆扩土.

今天介绍的这个electron就是一大神器,可以很方便的将网页应用打包为Mac, Win, Linux下的可执行文件,只需进行简单的配置,虽比不上原生的速度和瘦小,但是性价比着实不错.

一 在package.json中指明对应版本,(electron和electron-builder需放在devDependencies中),使用yarn添加模块

{
"name": "electron_example",
"private": true,
"scripts": {
},
"devDependencies": {
"electron": "~2.0.2",
"electron-builder": "~20.7.1"
}
}

二 添加配置文件,这是最重要的一步,这是我的推荐配置.(名字只能为electron-builder.yml)

appId: app.electron.example # 应用ID
artifactName: "${productName}-${version}.${ext}" # 应用最终的名称
productName: 'Electron Example App' # 打包完成后的应用名称
npmRebuild: false # 是否在开始编译前重构原生依赖,可先尝试true, 如果出现问题再修改为false, files:
- index.js # 打包文件入口,后文将给出 directories:
output: electron_packed/ # 输出路径
extraResources:
- from: "../dist/" #包含的待打包文件
to: ""
mac: # 打包成mac环境参数
target:
- dmg # 打包为dmg格式(可选pkg,zip等)
icon: "./build/icon.icns" # 图标所在路径(使用字符串相对路径)
 
dmg: # 安装界面
contents:
- x: 410
y: 170
type: link
path: /Applications
- x: 130
y: 170
type: file win: # 打包为win环境
icon: "./build/icon.ico" # 图标所在路径
target:
- nsis # 打包为nsis格式
verifyUpdateCodeSignature: false # 是否需要验证签名
# requestedExecutionLevel: requireAdministrator # 执行等级(是否需要管理员权限,通常情况不需要)
nsis:
oneClick: false # 是否一键安装(静默安装)
createDesktopShortcut: always # 创建桌面快捷方式
createStartMenuShortcut: true # 创建开始菜单快捷方式
# include: build/installer.nsh # 是否有额外的自定义安装需求,
runAfterFinish: true # 安装完成后是否勾选立即执行

三 编写入口文件 index.js

const electron = require('electron')const app = electron.app
const BrowserWindow = electron.BrowserWindow
const ipcMain = electron.ipcMain //EventEmitter class 事件触发类
const url = require('url')
const path = require('path') let mainWindow = null // 创建全局对象,不然当js对象被垃圾回收的时候窗口会自动关闭

// 创建浏览窗口,定义高宽
function createWindow () {
mainWindow = new BrowserWindow({
width: 1000,
height: 650,
}) // 加载本地文件
mainWindow.loadURL(url.format({
pathname: path.join(process.resourcesPath, 'index.html'),
protocol: 'file:',
slashes: true
}))
 // 调试阶段也可加载调试地址
// mainWindow.loadURL('http://localhost:8000/#/') // 打开调试工具
// mainWindow.webContents.openDevTools() // 窗口关闭时触发
mainWindow.on('closed', function () {
mainWindow = null
})
} // 实现单例,防止程序多开
const iShouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => {
// 如果为已有窗口,调用focus,如果最小化,还会恢复窗口
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.focus();
}
});
// 多开退出程序
if (iShouldQuit) {
return app.quit();
} // 加载完成之后调用事件
app.on('ready', createWindow) // 只对windows有效,当所有窗口关闭后退出(OS X会强制一个窗口显示)
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') {
app.quit()
}
}) app.on('activate', function () {
// 针对在OS X上的dock icon 点击时创建窗口
if (mainWindow === null) {
createWindow()
}
})
// 开始响应渲染
ipcMain.on('response-render', (event, arg) => {
event.sender.sender()
})

以上配置可以基本满足需求.

注意事项:

1 打包过程应该独立,所以不应该对项目造成污染,强烈建议创建一个新的文件夹(比如本文的electron_pack文件夹),放打包配置文件相关信息,包括打包好的文件,尽量避免对项目结构造成破坏

2 打包命令可写入package.json的脚本(script)中,注意, --project electron_pack是指定待打包文件夹,--win --ia32表示windows下32位,默认不配参数的话会按照当前平台的参数进行配置.并且需要再指定的打包文件夹中添加package.json(整个项目的package.json只需添加electron和electron_example的模块依赖),打包所需的配置写在这里.

electron_pack文件目录

.
├── build
│ ├── icon.icns
│ ├── icon.ico
│ └── icons.png
├── electron-builder.yml
├── index.js
└── package.json

项目的package.json

"build:mac": "rm -rf electron_pack/electron_packed && cross-env electron-builder --project electron_pack",
"build:win": "rm -rf electron_pack/electron_packed && cross-env electron-builder --win --ia32 --project electron_pack"

编译执行命令:

yarn build:mac
yarn build:win

打包所需的package.json (json格式不允许注释,此处只是便于解释和理解)

{
"name": "electron_example", # 项目名(注意与打包名的区别)
"version": "1.0.0", # 打包版本
"description": "This is the first version to pack app", # 项目描述
"main": "index.js", # 主入口(打包入口文件地址)
"devDependencies": { # 必须在此处指定的依赖
"electron": "~2.0.2",
"electron-builder": "~20.7.1"
},
"author": "Lorry",
"license": "ISC"
}

3 指定图片(icon)需要使用字符串形式并且为相对路径

4 版本的区别真的很大,如果根据相同姿势进行操作还是出了问题,请注意版本,我的版本为electron: ~2.0.2 electron-builder:~20.7.1

5 请一定使用yarn方式进行安装,可以避免一些很微妙的错误.

更多详细功能及自定义请参见electron英文文档 中文文档

使用electron进行原生应用的打包的更多相关文章

  1. 使用electron进行原生应用的打包(2)---主进程与渲染进程之间的通信

    上一篇讲了使用electron进行打包的配置相关文件,这篇主要讲electron中很重要的通信方式. 首先解释一个概念: electron打包的应用包含两个部分 electron的环境(node),也 ...

  2. 【Electron】在 WSL2 中 打包 electron Linux 版本

    [Electron]在 WSL2 中 打包 electron Linux 版本. 安装 WSL 我使用的是 Ubuntu 20.04.4 LTS 的版本. 安装 WSL 文档地址:https://do ...

  3. Window10 Electron 开发环境搭建及打包exe程序

    1.安装 Electron 首先要安装Node.js     (安装方法:https://www.cnblogs.com/inkwhite/p/9685520.html) 我这里已经安装好了. 2:安 ...

  4. Electron:将前端应用打包成桌面应用

    首先戳我下载安装对应版本的node.js. 安装完成后,打开命令行输入node -v以及npm -v查看对应版本.能够正常显示说明安装成功. 写一个最简单的hello world的nodejs应用.n ...

  5. Electron – 基础学习(3): 项目打包成exe桌面应用 之electron-builder

    前次用 electron-packager 打包成功,这次改用 electron-builder 打包,然后根据项目中实际需要进行选择使用. 第一步:全局安装 electron-builder,便于系 ...

  6. Electron – 基础学习(2): 项目打包成exe桌面应用 之electron-packager

    项目创建完成,启动正常,接下来就是项目打包了.将测试Demo打包成exe桌面应用,点击exe文件,运行项目. 书接上文,创建项目有三种方式 Git拷贝.直接创建:通过electron社群提供的命令行工 ...

  7. vuetify & electron (开发环境及打包)

    1.安装node 2.安装vue/cli $ npm install @vue/cli -g 3.创建应用并进入应用目录$ vue create my-app$ cd my-app 4.添加elect ...

  8. Electron – 项目报错整理(打包~1): WARNING: Make sure that .NET Framework 4.5 or later and Powershell 3 or later are installed, otherwise extracting the Electron zip file will hang.

    WARNING: Make sure that .NET Framework 4.5 or later and Powershell 3 or later are installed, otherwi ...

  9. electron开发 - mac平台的打包和签名 - 针对electron-builder的自动更新

    配合自动更新 - 安装包签名(mac)(待补充) 前提:实现自动更新需要签名 一.本地开发调试mac签名(无需具有权限的appple账号) 打开xcode,xcode -> preference ...

随机推荐

  1. javaweb项目运行时错误

    1.Debug模式下进入ThreadPoolExecutor.class的解决方式 进入window-->preferences-->java-->debug-->去掉Susp ...

  2. CRM认识的误区

    众所周知,CRM,就是平时说的“客户关系管理”,指用CRM来管理 企业与客户之间的关系.纵观整个IT圈子,做CRM的厂商比比皆是,每个厂商都有自己的产品宣言,令人眼花缭乱.但是领很多老板们不解的是,我 ...

  3. c# 根据当前时间获取,本周,本月,本季度,月初,月末,各个时间段(转但是都是使用过)

    DateTime dt = DateTime.Now;  //当前时间 DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") 24小时制 Dat ...

  4. centos7.4 install docker-ce

    1.uninstall old version docker yum -y remove docker-common docker container-selinux docker-selinux d ...

  5. nginx 为什么要反向代理 影藏后端 高效连接(给nginx,他自己返回) 端口冲突解决 多个服务

    nginx 为什么要反向代理  影藏后端   高效连接(给nginx,他自己返回)  端口冲突解决  多个服务 单机使用反向代理可以根据不同url匹配到不同站点   rsync 的工作原理和应用实例 ...

  6. oracle 手动 备份 恢复

    手工备份, 我只考虑全备, 即 control file, redo log file, datafile, password file, spfile(pfile), listener.ora, t ...

  7. 假设web应用的文档根目录为MyApp,那么可以从哪里找到database.jar文件。

    假设web应用的文档根目录为MyApp,那么可以从哪里找到database.jar文件. A. MyApp目录下 B. MyApp\images目录下 C. MyApp\WEB-INF目录下 D. M ...

  8. MySQL防止重复插入唯一限制的数据 4种方法

    MySQL防止重复插入唯一限制的数据,下面我们逐一分析 : 1.insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回.所以使用ignore请确保 ...

  9. 1小时轻松上手springmvc,视频网站后台开发

    由于最近半年一直在用springboot,但是也不能忘了本,于是把springmvc重新练了下,做了个前端传个表单,后台接收并显示的界面,该项目可以上传视频的URL,然后前端进行页面的播放,项目采用s ...

  10. 【Debian】install

    n年前的报废台式机实在不能忍受xp的速度,果断装Linux近期家里的小本装了Ubuntu14.04 ,实在不习惯最新的图形界面.装个debian试试吧. 1.专门弄一个空白分区2.官网下载debian ...