需求缘由

开发了很久的网页项目,领导突然想变成桌面应用,又要重写代码?no,no,no。不可能的。重写代码吃力不讨好,浪费时间,浪费精力。那么我们该怎么办呢?

幸好,electron是如此神奇,它提供了一种能让你将任何前端代码的网站页面封装成桌面应用。无论是vue,react 还是 angular等现有的框架都能实现。

基础

学习该内容需要基本的 javascript 语法基础,以及 node.js 基础。

步骤

1,安装electron依赖包(局部安装,只安装开发依赖)

npm install electron --save-dev

2,package.json 同级位置创建文件 electron.js

electron.js 文件内容:

// 主进程

// Modules to control application life and create native browser window

const {app, protocol, Menu, BrowserWindow } = require('electron')

const path = require('path')

const { readFile } = require ('fs')

const { URL } = require ('url')

// 处理文件打包之后的访问路径为 app的相对路径,

function createProtocol(scheme) {

protocol.registerBufferProtocol(

scheme,

(request, respond) => {

let pathName = new URL(request.url).pathname

pathName = decodeURI(pathName) // Needed in case URL contains spaces

readFile(path.join(__dirname, pathName), (error, data) => {

if (error) {

console.error(`Failed to read${pathName}on${scheme}protocol`, error)

}

const extension = path.extname(pathName).toLowerCase()

let mimeType = ''

if (extension === '.js') {

mimeType = 'text/javascript'

} else if (extension === '.html') {

mimeType = 'text/html'

} else if (extension === '.css') {

mimeType = 'text/css'

} else if (extension === '.svg' || extension === '.svgz') {

mimeType = 'image/svg+xml'

} else if (extension === '.json') {

mimeType = 'application/json'

}

respond({ mimeType, data })

})

},

error => {

if (error) {

console.error(`Failed to register${scheme}protocol`, error)

}

}

)

}

// 防止 localStorage 不可访问

protocol.registerSchemesAsPrivileged([{

scheme: 'app',

privileges: {

secure: true,

standard: true

}

}])

// Keep a global reference of the window object, if you don't, the window will

// be closed automatically when the JavaScript object is garbage collected.

let mainWindow

let template = [] //顶部菜单模板

function createWindow () {

// Create the browser window. 桌面应用的初始宽度、高度

mainWindow = new BrowserWindow({

width: 1600,

height: 1000,

})

// and load the index.html of the app.

createProtocol('app') // 创建一个应用,访问路径的初始化

mainWindow.loadURL('app://./index.html') // 入口文件, 窗口指向 index.html 文件作为首页,这里可以是vue,react,angular 的打包之后的dist目录内部的index.html文件。

// Open the DevTools.

// mainWindow.webContents.openDevTools()

let menu = Menu.buildFromTemplate(template)

Menu.setApplicationMenu(menu) // 重新设置桌面应用的顶部菜单

// Emitted when the window is closed.

mainWindow.on('closed', function () {

// Dereference the window object, usually you would store windows

// in an array if your app supports multi windows, this is the time

// when you should delete the corresponding element.

mainWindow = null

})

}

// This method will be called when Electron has finished

// initialization and is ready to create browser windows.

// Some APIs can only be used after this event occurs.

app.on('ready', createWindow)

// Quit when all windows are closed.

app.on('window-all-closed', function () {

// On macOS it is common for applications and their menu bar

// to stay active until the user quits explicitly with Cmd + Q

if (process.platform !== 'darwin') app.quit()

})

app.on('activate', function () {

// On macOS it's common to re-create a window in the app when the

// dock icon is clicked and there are no other windows open.

if (mainWindow === null) createWindow()

})

// In this file you can include the rest of your app's specific main process

// code. You can also put them in separate files and require them here.

3,在package.json文件中增加指令,用来启动Electron桌面应用

“scripts”: {

“dev”: “vue-cli-service serve”,

“build”: “vue-cli-service build”,

“electron-dev”: “vue-cli-service build && electron electron.js”, ------新增

“electron-build”: “electron-packager ./dist/ --arch=x64 --icon=logo.ico --overwrite” ------ 新增,打包成.exe 文件使用

},

备注:注意添加文件 logo.ico 到 package.json 的同级位置。

这里需要灵活变化:

1,vue-cli-service build 是打包成dist文件的命令,具体项目的打包命令具体替换,本项目使用了vue-cli脚手架,故命令如此。

2,./dist/ 是指生成的桌面应用是在dist文件内部的基础上打包的,因此要看你的index.html文件在哪里,一般build之后都有一个index.html文件。

4,在关于webpack的基础配置文件里的module.exports 内部添加一条数据 publicPath: ‘./’,

这里是为了让build之后的文件引用相对路径。

5,将所有的api 请求的前面都加上对应的网站域名。

这里最好有一个公用的函数,一般都是在axios 的 baseURL参数里面。

6,先执行 npm run electron_dev,可以运行开发中的electron桌面应用。

接下来就是怎么打包出桌面应用了,这里用的是打包工具electron-packager ,当然也可以使用别的工具。

7,安装 electron-packager

npm install electron-packager --save-dev

8,复制 package.json 到dist文件里,新增一条数据 “main”: “electron.js”,

9,复制 electron.js 到dist文件里,

10,执行 npm run electron_build ,便会生成安装包文件 vue-antd-pro-win32-x64 , 打开里面的 .exe 文件即可

总结

总体来说,代码不多,步骤也不多,但具体项目又可能遇到各种不可预测的问题,仍然需要具体问题具体分析。

参考内容

https://www.cnblogs.com/liulun/p/12984456.html

本文地址:https://blog.csdn.net/Aglaia_web/article/details/107543945

怎么把html封装成桌面应用,如何将一个现有的Vue网页项目封装成electron桌面应用...相关推荐

  1. 如何将一个现有的Vue网页项目封装成electron桌面应用(转载)

    简介 需求缘由 基础 步骤 总结 参考内容 需求缘由 开发了很久的网页项目,领导突然想变成桌面应用,又要重写代码?no,no,no.不可能的.重写代码吃力不讨好,浪费时间,浪费精力.那么我们该怎么办呢 ...

  2. 用 Vue 建立一个简单的 electron 桌面应用

    2019独角兽企业重金招聘Python工程师标准>>> 1. electron简介 2. 工具介绍 3. 实践效果,步骤 1)一个简单的 Electron 桌面应用都是冲 Hello ...

  3. vue脚手架项目打包成app_React和Vue脚手架项目打包编译后如何打开

    1.React项目 1.安装npm install -g serve 2.package.json文件加入 "homepage":"http://myname.githu ...

  4. 前端网页项目-学成在线案例

    典型的企业级网站 目的是为了整体感知企业级网站布局流程,复习以前知识 准备素材和工具: 学成在线PSD源文件 开发工具=PS(切图)/cutterman插件+vscode(代码)+chrome(测试) ...

  5. Vue项目打包成桌面程序exe除了使用electron-vue你还可以这样

    场景 electron-vue 基于 vue (基本上是它听起来的样子) 来构造 electron 应用程序的样板代码. 该项目的目的,是为了要避免使用 vue 手动建立起 electron 应用程序 ...

  6. vue2.0 如何自定义组件(vue组件的封装)

    一.前言 之前的博客聊过 vue2.0和react的技术选型:聊过vue的axios封装和vuex使用.今天简单聊聊 vue 组件的封装. vue 的ui框架现在是很多的,但是鉴于移动设备的复杂性,兼 ...

  7. 本地html如何封装成app,新手适用:如何把网页快速封装成APP

    原标题:新手适用:如何把网页快速封装成APP 最近有小伙伴找到小微:小微呀,我们家有个网站,但是我们没有APP,用户会觉得我们不正规的呀.现在开发一个APP那么贵,我们不想花太多钱了,你有什么好的主意 ...

  8. 用Electron将web网页程序包装成桌面应用

    用Electron将web网页程序包装成桌面应用 前提 web 端页面,真的太容易一不小心关掉了,或者,标签页比较多的时候不太容易找到,所以决定快速包装一个 认识electron electron快速 ...

  9. 【Electron】使用Electron将web项目打包成桌面应用程序

    目录 一.所需环境&打包前准备 1.安装node.js 2.安装electron 3.web项目 二.打包过程 1.打包配置 2. 安装打包器 3.执行打包命令: Electron是由GitH ...

最新文章

  1. 天体摇摆仪的工作原理-测量电路中的部分电路波形
  2. 英伟达吞并Arm失败!英美欧盟一齐干涉,老黄还要给孙正义12.5亿美元分手费
  3. 十三、java_GUI
  4. mysql linux selected_MySQL的查询语句--SELECT
  5. iphone开发中的一些小技
  6. Silverlight学习笔记(一)——Silverlight够酷吗?
  7. JDK源码解析之 java.lang.System
  8. mysql galera status_MySQL galera cluster集群的监控
  9. WORD如何自动给标题添加编号?
  10. 《Unix网络编程(第3版)》代码编译的一些问题
  11. 1094 谷歌的招聘 (20分)
  12. mongodb添加登陆验证
  13. 刷题记录 kuangbin带你飞专题四:最短路练习
  14. 软件工程----开发大致流程
  15. 十分钟理解线性代数的本质_线性代数的本质
  16. Linux下安装SVN服务(CentOS7下)单仓库版(老威改良版)
  17. 开箱即用!中文关键词抽取(Keyphrase Extraction),基于LDA与PageRank(TextRank, TPR, Salience Rank, Single TPR)
  18. Oracle多个数据库备份和还原,oracle 多数据库还原
  19. doNet面试宝典-常见整理(重复率高)
  20. uniapp PDA广播扫码

热门文章

  1. Swing学习笔记目录
  2. 将本地的项目导入到github仓库总结lxw
  3. 如何更优雅地使用 bilibili(b站)
  4. 解决方案|电力行业应如何应对数字化转型危机
  5. 货代里美国海运双清是什么意思
  6. 金蝶应收应付模块流程_金蝶专业版应收应付管理
  7. Linux系统(Ubuntu)编写C语言程序
  8. 苹果语音备忘录怎么改名字_语音备忘录误删除怎么恢复?安利你个简单方法
  9. 20190625 前端开发日报
  10. lammps案例:fix indent命令实现纳米摩擦及摩擦力计算