帮朋友公司做了点东西,他说有很多bug,我一看,基本问题都是浏览器兼容引起的,而electron内带Chromium内核,正好一直想尝试下electron,所以研究了一波。这里只是简单的使用electron作为壳,把自己的项目嵌进去,更多深入研究以后再来。

打包自己的项目

这里没啥说的自己的项目打包下来,类似下面

快速开始electron

上手electron,官方提供了一个非常好的快速上手实例"electron-quick-start"。

热更新

  • 因为Chromium的缘故,即使很小的项目打包出来也有120M左右,如果给客户使用,不可能每次有点改动就让客户重新安装,显然我们需要热更新。
  • 热更新的原理:每次启动程序我们就去拿本地的版本号和服务器上的版本号做对比,如果不一致就去请求资源,下载下来更新本地文件。
  • 首先我们观察打包出来的文件,发现原始文件都放在resources/app下面的,也即是说我们下载下来的文件直接覆盖到resources/app下就可以达到更新了。

  • 这里我推荐七牛云,免费的可以使用10G内存,我们把更新资源放上去,需要版本号package.json和更新包dist.zip
  • 然后改写electron配置main.js,加入检测更新的代码
/**
* 检测更新
*/
// const baseUrl = "./";
const baseUrl = "./resources/app/";
const fileUrl = "http://pm72qibzx.bkt.clouddn.com/";//这里需要修改为自己的资源外网
(function () {
return new Promise((resolve, reject) => {
request(
{
url: `${fileUrl}package.json?v=${new Date().getTime()}`,//请求package.json,与本地对比版本号
},
(error, res, body) => {
try {
if (error || res.statusCode !== 200) {
throw '更新版本号失败,请联系管理员';
}
const json = JSON.parse(body);
const { version, description } = json;
const localVersion = electron.app.getVersion();
// console.log(version, localVersion)
if (version != localVersion) {
mainWindow.webContents.send('updating', '更新中')
console.log('need update')
dialog.showMessageBox({
type: 'info',
title: '发现新版本',
message: '请点击按钮进行更新,预计持续几分钟,期间请不要操作,更新后会自动重启',
buttons: ['马上更新']
},
// (index) => {
// if (index == 0) {
// mainWindow.setProgressBar(0.5)
// } else {
// }
// }
)
mainWindow.setProgressBar(0.5);
downLoad()
.then(() => {
console.log('update success')
//重写版本号到本地
fs.readFile(`${baseUrl}package.json`, function (err, data) {
if (err) {
return console.error(err);
}
let newData = JSON.parse(data);
newData.version = version;
fs.writeFile(`${baseUrl}package.json`, JSON.stringify(newData), function (err) {
if (err) {
return console.error(err);
}
// 重启
app.relaunch({ args: process.argv.slice(1) });
app.exit(0);
});
});
})
} else {
console.log('no update')
}
} catch (err) {
reject(err);
}
})
})
})()
/**
* 更新
*/
const downLoad = () => {
return new Promise((resolve, reject) => {
const stream = fs.createWriteStream(`${baseUrl}temp/dist.zip`);
const url = `${fileUrl}dist.zip?v=${new Date().getTime()}`;
request(url).pipe(stream).on('close', () => {
const unzip = new adm_zip(`${baseUrl}temp/dist.zip`); //下载压缩更新包
unzip.extractAllTo(`${baseUrl}`, /*overwrite*/true); //解压替换本地文件
resolve()
});
})
}

windows下的安装包

  • 这里使用electron-winstaller
  • 配置在build.js
resultPromise = electronInstaller.createWindowsInstaller({
appDirectory: path.join('./electron/ElectronTest-win32-x64'), //入口
outputDirectory: path.join('./installer/installer64'), //出口
authors: 'yyt',
exe: 'ElectronTest.exe', //名称
setupIcon: path.join('icon.ico'),//安装图标,必须本地
iconUrl: 'http://pm72qibzx.bkt.clouddn.com/icon.ico',//程序图标,必须url
noMsi: true,
});
  • node build.js 打包成win安装包

完成

  • 完成安装后,玩耍吧

源码

  • 删除electron和install,防止老文件
  • 考入自己项目文件到跟目录,覆盖index.html
  • cnpm i 或者npm i
  • 修改main.js中fileUrl为自己的更新包资源地
  • 修改build.js中的安装包名称,图标等
  • npm run packager 打包
  • 注意:需要先进入electron项目,‘比如D:\phpStudy\WWW\others\electron-test\electron\ElectronTest-win32-x64\resources\app’,安装cnpm i request adm-zip
  • node build.js 打包成win安装包

最后

大家好,这里是「 TaoLand 」,这个博客主要用于记录一个菜鸟程序猿的Growth之路。这也是自己第一次做博客,希望和大家多多交流,一起成长!文章将会在下列地址同步更新……

个人博客:www.yangyuetao.cn

小程序:TaoLand

electron热更新与windows下的安装包的更多相关文章

  1. Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat

    刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft ...

  2. 【python】 Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat

    刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft ...

  3. (转)Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat

    刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft ...

  4. windows下 Python 安装包的配置

    1.下载安装 Pythonpython-2.7.2.msi  http://www.python.org/download/如下载 Python 2.7.2,安装目录为 C:\Python27 2.添 ...

  5. windows下pip安装包权限的问题

    md哔了狗了,把scipy弄崩了,还顺带把numpy弄崩了... 然后安装包一直权限不允许: 于是按照下面这篇博客以管理员运行cmd,结果还是没卵用 http://www.cnblogs.com/li ...

  6. Linux下一键安装包的基础上安装SVN及实现nginx web同步更新

    Linux下一键安装包的基础上安装SVN及实现nginx web同步更新 一.安装 1.查看是否安装cvs rpm -qa | grep subversion 2.安装 yum install sub ...

  7. linux下各安装包的安装方法

    <转>linux下各安装包的安装方法   一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root ...

  8. Windows7环境下Composer 安装包的Cache目录位置

    http://segmentfault.com/a/1190000000355928 https://getcomposer.org/doc/ 要说Composer的用法,以后再说,现在只记录wind ...

  9. RHEL6下获取安装包(RPM)而不安装的方法

    RHEL6下获取安装包(RPM)而不安装的方法 有时候我们只能在某个机器上网获得RPM安装包,如何将RPM包在不能上网的内网机器安装,就需要能将安装包下载到本地而不安装,然后再把这些包复制到内网机器, ...

随机推荐

  1. 快速切题 sgu104. Little shop of flowers DP 难度:0

    104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB PROBLEM Yo ...

  2. Python 爬虫常用库(九)

  3. Spring的DAO模块

    Spring的DAO模块提供了对JDBC.Hibernate.JDO等DAO层支持. DAO模块依赖 commons-pool.jar.commons-collections.jar package ...

  4. nginx对上传文件大小的限制

    前几天项目组的一个小伙子过来跟我说,他本地上传的文件没问题,但是在测试环境上测试的时候上传失败. 后来发现时nginx对上传文件的大小做了限制,默认是1M,那么按照需求我们更改了限值为20M vi c ...

  5. Invalid /admin/*.jsp in filter mapping

    完成错误信息 严重: A child container failed during start java.util.concurrent.ExecutionException: org.apache ...

  6. 【跟着stackoverflow学Pandas】 - Adding new column to existing DataFrame in Python pandas - Pandas 添加列

    最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...

  7. 2.1 Linux中wait、system 分析

    wait与waitpid: 当子进程退出的时候,内核会向父进程发送SIGCHID信号,子进程的退出是一个异步事件(子进程可以在父进程运行的任何时刻终止). 子进程退出时,内核将子进程置为僵尸状态,这个 ...

  8. Shader的基本用法和语法结构

    Shader的基本用法和语法结构 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Introductio ...

  9. HDU 1263:水果(map)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 #include <stdio.h> #include <string.h&g ...

  10. Fzu软工第二次作业-词频分析

    (0)前言: Github项目 作业地址 (1)PSP表格: PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 ...