因为信奉一句话: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. C++刷题——2830: 递归求1*1+2*2+3*3+……+n*n

    Description 定义一个递归函数sum int sum(int n); //函数声明,返回12+22+32+--+n2的和 注意:sum为递归函数 Input 正整数n的值 Output 12 ...

  2. DiskLrucCache使用Demo(强烈推荐,非常好用)

    DiskLrucCache使用的Demo,这个demo是从网络获取一张图片,保存到本地缓存中(sdcard和内存),当下载成功后.再打开不会又一次向网络请求图片.而是世界使用本地资源. 要使用Disk ...

  3. Atitit.加密算法 des  aes 各个语言不同的原理与解决方案java php c#

    Atitit.加密算法 des  aes 各个语言不同的原理与解决方案java php c# 1. 加密算法的参数::算法/模式/填充 1 2. 标准加密api使用流程1 2.1. Md5——16bi ...

  4. tail 命令详解

    tail 指令 功能:从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不 ...

  5. 无需序列号安装Photoshop CS6

    在百度下载Photoshop CS6破解版,解压后,如图所示   进入Photoshop_CS6.3510481888\Adobe CS6目录,双击Set-up.exe开始安装   点击接受协议,进入 ...

  6. 7-16 Bestcoder a Oracle

    Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  7. 解读MT7620A上的DTS文件

    DTS文件,即Device Tree Source,是某些芯片(在Openwrt的target/linux/中,至少ramips,lantiq和BRCM有此文件)用于描述硬件设备资源的文件.此文件是驱 ...

  8. 善用php-fpm的慢执行日志slow log,分析php性能问题

    众所周知,mysql有slow query log,根据慢查询日志,我们可以知道那些sql语句有性能问题.作为mysql的好搭档,php也有这样的功能.如果你使用php-fpm来管理php的话,你可以 ...

  9. 木马suppoie 处理的几个思路 木马文件的权限所有者 属主数组 定时任务 目录权限

    木马suppoie 处理的几个思路  木马文件的权限所有者  属主数组  定时任务   目录权限

  10. Link-based Classification相关数据集

    Link-based Classification相关数据集 Datasets Document Classification Datasets: CiteSeer: The CiteSeer dat ...