因为信奉一句话: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. JUC组件扩展(二)-JAVA并行框架Fork/Join(三):在任务中抛出异常

    在java当中,异常一共分为两种.一种是运行时异常,一种是非运行是异常. 非运行时异常:这些异常必须在方法上通过throws子句抛出.或者在方法体内进行try{…}catch{…}来捕获异常. 运行时 ...

  2. JDBC连接数据库的四种方式:DriverManager,DataSource,DBCP,C3P0

    方法1:使用java.sql.DriverManager类 驱动管理器类,用于管理所有注册的驱动程序. (注:DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源 ...

  3. myeclipce怎么破解

    MyEclipse安装文件下载,下载地址 http://www.jb51.net/softs/150886.html 你也可以进入官方网站下载:http://www.myeclipsecn.com/d ...

  4. jquery ui 与 easy ui同时引入 展示效果冲突的问题

    jquery ui 由于在定位控件的时候跟easy UI 控件名相同,同时引入会导致冲突 如果需要两个都存在,可以去jquery ui下载定制版ui 脚本文件

  5. iOS UITableViewHeaderFooterView设置背景色为透明

    给UITableViewHeaderFooterView设置背景色分2种情况 1.tableView在group模式下,UITableViewHeaderFooterView的背景色默认是透明的,此时 ...

  6. emblog后台拿shell

    emlog版本:5.3.1 先本地弄好shell 新建一个文件夹,里面放shell,shell名称和文件名要一致.压缩为zip 然后在安装插件处上传. 成功后的路径content/plugins/te ...

  7. 用e2fsck修复受损的linux文件系统

    今天想尝试直接从linux deepin拷贝一些文件到windows 10而不重启电脑,所以就安装Ext2Mgr了并加载了linux的几个磁盘: / /home 再次重启系统想进入linux的时发现系 ...

  8. [Idea Fragments] PostScript for 3D Print??

    今天看到一篇关于PostScript的文章<编程珠玑番外篇-P PostScript 语言里的珠玑>,尤其是篇尾的这段话,让我对3D Print浮想联翩: 因为 PostScript 语言 ...

  9. 第二百四十三节,Bootstrap模态框插件

    Bootstrap模态框插件 学习要点: 1.基本使用 2.用法说明 本节课我们主要学习一下 Bootstrap 中的模态框插件,这是一款交互式网站非常常见的 弹窗功能插件. 一.基本使用 使用模态框 ...

  10. 使用html替代excel导出数据的优势和技巧

    之前一直使用NPOI或者微软office官方组件导出excel,但是多多少少会有写小问题,不是数据量不能过大(xls的问题,用xlsx就可以更大了),就是速度慢,或者文件体积太大 中途采用过csv(逗 ...