vue+electron一键入门

前言

帮公司弄了一个vue+electron项目,里面用到了axios、element-ui、ue-router、js-md5、sqlite3这些依赖库,其中sqlite3比较难搞下面会详细展开来讲,同时也涉及打包(window包、mac包)

开始

其实项目整体没啥好讲,我就讲一下数据库的封装、打包配置注意事项即可

sqlite3数据库使用

ps: 你要有python2.7版本

npm install sqlite3 --save

具体安装步骤你可以百度或者参考这篇文章

安装完成之后,你还要配置来到vue.config.js文件,开启node环境

module.exports = {pluginOptions:{electronBuilder:{nodeIntegration:true}}
}

简单封装的db.js

时间戳小技巧main.js

Date.prototype.Format = function (fmt) {var o = {"M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 };if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));for (var k in o)if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));return fmt;
}
let sqlite3 = require('sqlite3').verbose();
const path = require('path');
let basePath = process.env.NODE_ENV !== 'development' ? path.dirname(process.execPath) : process.cwd();
let dbPath = path.join(basePath, '/dataBase/table.db');
console.log('数据库路径: ', dbPath);
const db = new sqlite3.Database(dbPath);// 启动软件时判断是否有db文件,没有就创建db文件,同时创建表...看个人需求自行完成// db.all("select * from province_list", (err, res) => {
//   console.log(JSON.stringify(res))
// })export default db// 使用1
// 1.main.js 引入注册
import db from './db'
Vue.prototype.$db = db// 2.index.vue文件使用
this.$db.all("select * from province_list", (err, res) => {console.log(JSON.stringify(res))
})// 使用2
// 1.index.vue文件使用
import modelHome from '/db/api/home'
modelHome.test()
// 2./db/aip/home/index.jsimport db from '../db'
test() {return new Promise((resolve, reject) => {db.all("select * from task_list", (err, res) => {// console.log(res)if (err) {reject(err);} else {resolve(res);}})})},__addTask(item) {item.update_time = new Date().Format("yyyy/MM/dd hh:mm:ss")item.crate_time = new Date().Format("yyyy/MM/dd hh:mm:ss")return new Promise((resolve, reject) => {db.all(`INSERT INTO task_list VALUES (NULL, "${item.name}", "${item.linkUrl}", "${item.ua_type}", "${item.plan_open_num}", "${item.window_num}", '${item.proxy_config}',"${item.update_time}", "${item.crate_time}")`, (err, res) => {if (err) {reject(err)} else {resolve(res)}})})},__updateTask(item) {item.update_time = new Date().Format("yyyy/MM/dd hh:mm:ss")return new Promise((resolve, reject) => {db.all(`UPDATE task_list SET name="${item.name}", linkUrl="${item.linkUrl}", ua_type="${item.ua_type}", plan_open_num="${item.plan_open_num}", window_num="${item.window_num}", proxy_config='${item.proxy_config}', update_time="${item.update_time}" WHERE id="${item.id}"`, (err, res) => {if (err) {reject(err)} else {resolve(res)}})})},__dateltTask(item) {return new Promise((resolve, reject) => {db.all(`DELETE FROM task_list  WHERE id="${item.id}"`, (err, res) => {if (err) {reject(err)} else {resolve(res)}})})},

数据库知识我们就讲完了,注意点如果你没有自动生成db文件,你打包之后需要手动复制db文件到安装软件的目录里面。

打包

1.隐藏help、file这些菜单

src/background.js

import { app, protocol, BrowserWindow, Menu } from 'electron'app.on('ready', async () => {createWindow()// 隐藏菜单栏Menu.setApplicationMenu(null);
})

2.修改窗口标题名

public/index.html

<!DOCTYPE html>
<html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1.0"><link rel="icon" href="<%= BASE_URL %>favicon.ico"><!-- <title><%= htmlWebpackPlugin.options.title %></title> --><title>测试标题名</title></head><body><noscript><strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><!-- built files will be auto injected --></body>
</html>

3.打包配置修改各种东西

vue.config.js

module.exports = {pluginOptions:{electronBuilder:{nodeIntegration:true,// 打包配置参数builderOptions: {productName: "测试应用",  // 应用的名称appId: 'www.xxx.com', // 项目唯一标识copyright: 'Copyright © xxx',directories: {output: "build_electron" // 输出文件夹},electronDownload: {mirror: "https://npm.taobao.org/mirrors/electron/" //镜像设置},win: {icon: './src/assets/logo.ico', //打包windows版本的logotarget: [{target: 'nsis', // 利用nsis制作安装程序'arch': ['x64', // 64位'ia32']}]},nsis: {oneClick: false, // 一键安装perMachine: true, // 是否开启安装时权限限制(此电脑或当前用户)allowElevation: true, // 允许请求提升。 如果为false,则用户必须使用提升的权限重新启动安装程序。allowToChangeInstallationDirectory: true, // 允许修改安装目录installerIcon: "./src/assets/logo.ico",  // 安装图标installerHeaderIcon: "./src/assets/logo.ico", // 安装时头部图标uninstallerIcon: "./src/assets/logo.ico", // 卸载图标createDesktopShortcut: true, // 创建桌面图标createStartMenuShortcut: true, // 创建开始菜单图标},}},}
}

4.打包window包和mac包

package.json

  "scripts": {"e:build:mac": "vue-cli-service electron:build --mac","e:build": "vue-cli-service electron:build","e:serve": "vue-cli-service electron:serve"}
npm run e:build
// window包
npm run e:build:mac
// mac包

注意mac包需要在mac电脑才能打,同时第一次打包的时候需要开启科学上网(它会自动下载electron-builder依赖),第一次打包成功之后 第二次就会快很多。

总结

1.sqlite3数据库安装、使用

2.打包配置,注意点就是要开启科学上网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux安装logstash

相关链接 项⽬主⻚&#xff1a; https://www.elastic.co/cn/downloads/logstash 下载地址&#xff1a; wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz 官网下载可能比较慢&#xff0c;下面提供下载地址 百度云链接&#xff1a;https://pan.…

[golang 流媒体在线直播系统] 4.真实RTMP推流摄像头把摄像头拍摄的信息发送到腾讯云流媒体服务器实现直播

用RTMP推流摄像头把摄像头拍摄的信息发送到腾讯云流媒体服务器实现直播,该功能适用范围广,比如:幼儿园直播、农场视频直播, 一.准备工作 要实现上面的功能,需要准备如下设备: 推流摄像机&#xff08;监控&#xff09; 流媒体直播服务器(腾讯云流媒体服务器,自己搭建的流媒体服务…

【LeetCode-简单题】541. 反转字符串 II

文章目录 题目方法一&#xff1a;双指针 题目 方法一&#xff1a;双指针 题目的意思&#xff1a; 通俗一点说&#xff0c;每隔k个反转k个&#xff0c;末尾不够k个时全部反转&#xff1b; 需要注意右边界的取值 int r Math.min(l k -1,n-1);//取右边界与n-1的最小值 确定边界…

第28节-PhotoShop基础课程-图层操作

文章目录 前言1.像素图层2.删除 Delete3.合并 Ctrl E4.盖印 Ctrl Shift Alt5.图层顺序-拖动就可以6.编组-Ctrl G 管理图层-分类存放7.锁定图层-背景图层8.不透明度9.查找图层 2.智能图层1.能保持图片放大缩小&#xff08;Ctrl T&#xff09;的时候不丢失分辨率2.和滤镜配合使…

Java手写哈希集合和案例拓展

Java手写哈希集合和案例拓展 1. 思维导图 #mermaid-svg-hx4PFS8HX0SmLwDA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hx4PFS8HX0SmLwDA .error-icon{fill:#552222;}#mermaid-svg-hx4PFS8HX0SmLwDA .error-text…

Prometheus 基础入门

一.Prometheus Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开…

Linux学习第18天:Linux并发与竞争: 没有规矩不成方圆

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 提到锁”&#xff0c;可能想到的更多的是限制。现实中&#xff0c;生活中锁也 存在于身边的方方面面。正所谓没有规矩不成方圆&#xff0c; 没有身边的这些锁&…

vue 引入zTree

下载js包解压后找个地方放文件夹内 引入 import "/common/zTree/js/jquery-1.4.4.min" import "/common/zTree/js/jquery.ztree.core.min.js" import "/common/zTree/js/jquery.ztree.excheck.min.js" import "/common/zTree/css/metroSt…

《TCP/IP网络编程》阅读笔记--epoll的使用

1--epoll的优点 select()的缺点&#xff1a; ① 调用 select() 函数后针对所有文件描述符的循环语句&#xff1b; ② 调用 select() 函数时需要向操作系统传递监视对象信息&#xff1b; epoll()的优点&#xff1a; ① 无需编写以监视状态变化为目的的针对所有文件描述符的循环语…

webpack 基础配置

常见配置 文件打包的出口和入口webpack如何开启一台服务webpack 如何打包图片&#xff0c;静态资源等。webpack 配置 loader配置 plugin配置sourceMap配置 babel 语法降级等 接下来 &#xff0c; 我们先从webpack的基本配置 开始吧&#xff01; 在准备 配置之前 , 搭建一个 …

【窗体】Winform两个窗体之间通过委托事件进行值传递,基础篇

2023年&#xff0c;第38周。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; 在实际项目中&#xff0c;我们可能会用到一些窗体做一些小工具或者小功能。比如&#xff1a;运行程序&#xff0c;在主窗体A基础上&#xff0c;点击某个按钮希望能…

修改mars3d地球背景色

示例链接 示例链接 修改代码

Git: 工作区、暂存区、本地仓库、远程仓库

参考链接&#xff1a; Git: 工作区、暂存区、本地仓库、远程仓库 https://blog.csdn.net/weixin_36750623/article/details/96189838

《C++ primer plus》精炼(OOP部分)——对象和类(5)

“学习是照亮心灵的火炬&#xff0c;它永不熄灭&#xff0c;永不止息。” 文章目录 类的自动和强制类型转换原始类型转换为自定义类型将自定义类型转换为原始类型 类的自动和强制类型转换 原始类型转换为自定义类型 可以用一个参数的构造函数来实现&#xff0c;例如&#xff…

QStandardItem通过setCheckable添加复选框后无法再次通过setCheckable取消复选框的问题

前言 如题所示&#xff0c;通过setCheckable添加复选框后&#xff0c;想要通过setCheckable(false)取消复选框&#xff0c;你会发现根本没有作用的。 问题复现 #include "widget.h" #include "ui_widget.h" #include <QList>Widget::Widget(QWidg…

卡尔曼滤波(Kalman Filter)原理浅析-数学理论推导-1

目录 前言数学理论推导1. 递归算法2. 数学基础结语参考 前言 最近项目需求涉及到目标跟踪部分&#xff0c;准备从 DeepSORT 多目标跟踪算法入手。DeepSORT 中涉及的内容有点多&#xff0c;以前也就对其进行了简单的了解&#xff0c;但是真正去做发现总是存在这样或者那样的困惑…

Java idea编译器工程out目录修改

问题 多个工程在一个文件夹下&#xff0c;有时会变为所有的工程只用一个out文件夹&#xff0c;这时运行会出错。 解决方案是将各自的工程out放在自己的文件夹下面 以上面这个工程为例 如果project structure里面有则直接按照下面的指标设置&#xff0c;如果没有则添加到里面再…

ABB 1TGE120010R1300 控制主板模块

ABB 1TGE120010R1300 控制主板模块是一种用于控制和监测电力设备的模块&#xff0c;具有以下功能&#xff1a; 控制和监测电力设备&#xff1a;该模块可以通过与电力设备连接来控制和监测设备的性能和状态&#xff0c;例如启停设备、调节电压和功率等。 通信功能&#xff1a;该…

docker 和k8s 入门

docker 和k8s 入门 本文是云原生的学习记录&#xff0c;可以参考以下文档 k8s https://www.yuque.com/leifengyang/oncloud 相关视频教程可参考如下 https://www.bilibili.com/video/BV13Q4y1C7hS?p2&vd_source0882f549dac54045384d4a921596e234 相对于公有云&#x…

LeetCode 面试题 04.05. 合法二叉搜索树

文章目录 一、题目二、C# 题解 一、题目 实现一个函数&#xff0c;检查一棵二叉树是否为二叉搜索树。 点击此处跳转题目。 示例 1: 输入: 2/ \ 1 3输出: true 示例 2: 输入: 5/ \1 4/ \ 3 6输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 &#xff…