项目介绍
web项目使用的是 React+Umi+Antd
使用的是umi的脚手架创建项目
yarn create @umijs/umi-app
链接:umi官网
流程
1.将web项目打包成静态文件后
2.在打包后的文件 再用electron
打包成桌面应用
(所以其实是用什么框架或者脚手架,都没有什么关系,最后electron
需要的是可直接在浏览器访问的静态文件=》npm run build
以后生成的index.html
)
Coding
- 将项目进行打包,使用命令行
npm run build
-
umi脚手架打包出来的文件在文件夹
dist
里,点击生成出来的index.html检测是否能正常在浏览器中review项目。
如果显示白屏或者资源加载问题(排除代码本身问题),一般是路径设置问题,可参考我上篇文章链接:react+umi npm run build打包后的静态文件无法本地打开显示白屏
如果依然存在问题,可参考官网
umi部署:https://umijs.org/zh-CN/docs/deployment -
在当前dist文件夹中
(1)初始化项目信息
npm init
(2)安装electron 和electron-pack
yarn add electron electron-pack
(3)在package.json中加入打包的命令行
"pack": "electron-packager . cici --win --out=release --arch=x64 --app-version=1.0.0 --electron-version=1.8.4 --overwrite --icon=./favicon.png"
命令行解析:
最后的package.json如下{ "name": "cici", "version": "1.0.0", "main": "main.js", "author": { "name": "cici" }, "scripts": { "pack": "electron-packager . cici --win --out=release --arch=x64 --app-version=1.0.0 --electron-version=1.8.4 --overwrite --icon=./favicon.png" }, "license": "MIT", "dependencies": { "electron": "^10.1.3", "electron-packager": "^15.1.0" } }
(4)在
dist
文件夹中加入main.js
(electron 包的配置文件),代码如下const electron = require('electron'); // 控制应用生命周期的模块 const { app} = electron; // 创建本地浏览器窗口的模块 const { BrowserWindow} = electron; // 指向窗口对象的一个全局引用,如果没有这个引用,那么当该javascript对象被垃圾回收的 // 时候该窗口将会自动关闭 let win; function createWindow() { // 创建一个新的浏览器窗口 win = new BrowserWindow({ width: 1920, height: 1080}); // 并且装载应用的index.html页面 win.loadURL(`file://${ __dirname}/index.html`); // 打开开发工具页面 //win.webContents.openDevTools(); // 当窗口关闭时调用的方法 win.on('closed', () => { // 解除窗口对象的引用,通常而言如果应用支持多个窗口的话,你会在一个数组里 // 存放窗口对象,在窗口关闭的时候应当删除相应的元素。 win = null; }); } // 当Electron完成初始化并且已经创建了浏览器窗口,则该方法将会被调用。 // 有些API只能在该事件发生后才能被使用。 app.on('ready', createWindow); /* var mainWindow = new BrowserWindow({ webPreferences: { nodeIntegration: false } }); */ // 当所有的窗口被关闭后退出应用 app.on('window-all-closed', () => { // 对于OS X系统,应用和相应的菜单栏会一直激活直到用户通过Cmd + Q显式退出 if (process.platform !== 'darwin') { app.quit(); } }); app.on('activate', () => { // 对于OS X系统,当dock图标被点击后会重新创建一个app窗口,并且不会有其他 // 窗口打开 if (win === null) { createWindow(); } }); // 在这个文件后面你可以直接包含你应用特定的由主进程运行的代码。 // 也可以把这些代码放在另一个文件中然后在这里导入。
最后打包出来的应用程序
这个文件夹就可以给出去啦
但是如果有的需求是整合成一个应用程序包,而不是文件夹
可以查一查资料
后面 如果我有研究后会续上