目前electron的打包和升级基本上都是通过node.js实现 ,关键步骤如下:
- 通过yarn electron:build --publish always 生成latest.yml 文件
- 搭建http 服务配置静态资源
- backgroud.js 来获取最新的升级包文件
能够实现latest.yml 生成的vue.config.js 配置,目前看这里的publish中的url是没有必要的,因为目前electron-builder是不支持上传安装包到对应的服务器仓库的,至于如何配置git 仓库上传,还需要继续尝试
module.exports = {
publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
pluginOptions: {
electronBuilder: {
nodeIntegration: true,
builderOptions: {
appId: 'com.vincent.electron-builder',
productName: 'ElectronBuilderDemo',
copyright: 'Copyright © 2020 electron-builder Demo',
win: {
publish: [
{
"provider": "generic",
"url": "http://localhost:8080/upload/",//隐藏版本服务器地址
}
]
},
nsis: {
oneClick: false, // 是否一键安装
allowToChangeInstallationDirectory: true // 允许用户选择安装位置
},
}
}
}
}
搭建http 静态资源服务可以使用express模块,也可以用原生的http模块实现
通过http 搭建静态态资源http服务
var http = require('http');
var url = require('url');
var fs = require('fs');
var path = require('path');
//创建服务器,监听8080端口
var server = http.createServer(function (req, res) {
//屏蔽/favicon.ico的请求
if(req.url === '/favicon.ico')
{
return ;
};
//解析请求路径
var pathname = url.parse(req.url).pathname;
console.log(pathname);
//默认首页
if(pathname.indexOf('.') === -1)
{
pathname = "/index.html"
};
//获取文件后缀名
var extname = path.extname(pathname);
console.log(extname);
//读取文件
fs.readFile('./' + pathname, function (err,data) {
//如果出错则表示请求路径不正确,显示404
if(err){
fs.readFile("./upload/404.html",function(err,data){
res.writeHead(404,{"Content-Type":"text/html;charset=UTF-8"});
res.end(data);
});
return;
};
//读取数据
//结束响应
getMime(extname,function(mime){
res.writeHead(200,{"Content-Type": "yml"});
res.end(data);
});
});
});
//设置监听端口
server.listen(8080,'127.0.0.1', function () {
console.log("server is started listen port 8080");
});
//getMIME()
function getMime(extname,callback)
{
fs.readFile('./upload/latest.yml', function (err,data) {
if(err)
{
throw Error("找不到mime.json文件");
return;
};
callback(data);
});
}