让自动化程序运行起来

本文讲述了如何在Electron应用中通过参数传递配置文件,使用fs模块读取并解析数据,同时实现配置数据的持久化存储,使用SQLite3进行CRUD操作,确保配置数据的持久使用和应用程序的自动化流程管理。
摘要由CSDN通过智能技术生成

就如前文已经把chrome插件与electron关联上,现在缺一个运行的核心。
之前根据配置化自动化程序以及搭建好,只不过当时写死了一个流程图数据数组。现在需要就是通过参数的形式传入即可。这里考虑的传入配置数据的文件,毕竟数据量会很大。所以实现步骤可以分为以下:
步骤1: 读取传入参数:filePath
步骤2: 利用fs读取filePath文件的数据
步骤3: 拿到数据执行
基本代码如下:

// 设置 filepath参数
const argv = require('minimist')(process.argv.slice(2),  {
  string: ['filepath'],
});
//  利用fs读取filePath文件的数据
 // const mode = argv.mode || 'dev'
  try {
    const data = fs.readFileSync(argv.filepath, 'utf-8');
    const dataconfig = JSON.parse(data);
    taskData = JSON.parse(dataconfig.task)
    if (Array.isArray(taskData)) {
      // console.log('taskData---', taskData)
       // 步骤3: 执行
      await runTask({ browser, taskData, env })
      logger.info('任务结束',)
    } else {
      // console.error('读取或解析任务数据时发生错误: 数据类型错误',);
      logger.error('读取或解析任务数据时发生错误: 数据类型错误',)
    }
  } catch (err) {
    // console.error('读取或解析任务数据时发生错误 err:', err);
    logger.error('程序执行异常:', err)
  }
  

未到预期

通过 child_process 去执行这个脚本,发现并没有弹cmd命令行窗,这不符合预期想要的结果。
经查询可通过打包exe格式可以解决

// electron中执行
   const terminal = process.platform === 'win32' ? 'cmd.exe' : 'x-terminal-emulator';
      const command = process.platform === 'win32' ? `/c start ${path.join(__dirname, `${process.env.CHROME_DIST}task.run-win.exe `)} --filepath ${filepath}` : '-e notepad.exe';
      spawn(terminal, [command])

pkg 打包

npm install -g pkg
pkg  ./index.js --public 

执行源码

配置数据持久化

我们希望配置自动化的数据可以长期使用,这样下次进来就不用重新设计。这个时候就可以用到 sqlite3。
先定义数据库字段,
1、id 唯一标识,
2、filepath 文件路径
3、 taskdesc 任务描述
4、taskurl 当前任务操作的网页url

const sqlite3 = require('sqlite3').verbose();
const path = require('path');
const { app } = require('electron');

class Sqlite {
  db: any
  constructor() {
    // 创建一个 SQLite 数据库文件
    const dbPath = path.join(app.getPath('userData'), 'jest.pro.db');
    this.db = new sqlite3.Database(dbPath);
    this.db.serialize(() => {
      this.db.run('CREATE TABLE IF NOT EXISTS jest_task (id TEXT, filepath TEXT,  taskdesc TEXT, taskurl TEXT )');
    });

  }

  // 运行sql
  run(sql, params) {
    return new Promise((resolve, reject) => {
      this.db.run(sql, (err) => {
        console.log('run--', err)
        if (err === null) {
          resolve(err);
        } else {
          reject(err);
        }
      });
    });
  }
  all(sql, params = '') {
    return new Promise((resolve, reject) => {
      this.db.all(sql, (err, data) => {
   
        if (err) {
          reject(err);
        } else {
          resolve(data);
        }
      });
    });
  }
  // 关闭数据库
  close() {
    this.db.close();
  }
  static getInstance() { 
    if (!Sqlite.instance) {
      Sqlite.instance = new Sqlite()
    }
    return Sqlite.instance
  }
}
export default Sqlite

CRUD

当我们在electron 对流程图进行删除、添加、修改操作时,使用ipc通信,同时对数据库进行操作。

import Sqlite from "./data.sqlite";

export const saveTask = (id, filepath, taskdesc, taskurl) => {
  Sqlite.getInstance().run(`INSERT INTO jest_task VALUES ('${id}', '${filepath}', '${taskdesc}', '${taskurl}');`)
}

export const getAllTask = async () => {
  try {
    return  await Sqlite.getInstance().all(`SELECT * FROM jest_task;`)
  } catch (error) {
    return []
  }
}

export const deleteTask = (id) => {
  Sqlite.getInstance().run(`DELETE FROM jest_task WHERE id = '${id}';`)
}

最后

一波操作下来,整个配置流程图自动化的桌面应用就完成。嘿嘿。
整个项目源码

  • 13
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也想MK代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值