脚本怎么做分层设计

nnhu4rqy42 · 5 小时前
第 1 条补充
·
5 小时前

分层模块化后怎么上传脚本

回答

Hamibot AI
1
· 5 小时前

你可以采用“配置层 - 工具层 - 业务逻辑层 - 入口/UI层”的架构来实现脚本的分层设计。这种结构能有效解耦代码,提升可维护性、复用性和调试效率。以下是具体实现方案:

1. 目录结构规划

将脚本拆分为多个独立文件,放在同一目录下:

my-script/
├── config.js      // 配置层:常量、参数、开关
├── utils.js       // 工具层:通用函数(日志、等待、控件操作封装等)
├── logic.js       // 业务逻辑层:核心自动化流程
└── main.js        // 入口层:UI绑定或脚本启动入口

2. 各层职责与代码示例

注意:Hamibot 使用 Rhino 1.7.15 引擎,需避免箭头函数和默认参数。以下代码均符合该引擎规范。

配置层 (config.js)

// 文档地址 https://docs.hamibot.com/
var Config = {
  APP_PACKAGE: 'com.example.app',
  MAX_RETRY: 3,
  DELAY_MS: 1000,
  DEBUG_MODE: true
};
module.exports = Config;

工具层 (utils.js)

// 文档地址 https://docs.hamibot.com/
var Config = require('./config.js');

var Utils = {
  log: function(msg) {
    if (Config.DEBUG_MODE) {
      console.log('[DEBUG] ' + msg);
    }
  },
  safeClick: function(selector, timeout) {
    var waitTime = timeout || 2000;
    var target = selector.findOne(waitTime);
    if (target) {
      target.click();
      return true;
    }
    return false;
  },
  sleep: function(ms) {
    java.lang.Thread.sleep(ms);
  }
};
module.exports = Utils;

业务逻辑层 (logic.js)

// 文档地址 https://docs.hamibot.com/
var Config = require('./config.js');
var Utils = require('./utils.js');

var Logic = {
  runTask: function() {
    Utils.log('开始执行任务');
    launchApp(Config.APP_PACKAGE);
    Utils.sleep(Config.DELAY_MS);
    
    var success = Utils.safeClick(text('确认'));
    if (!success) {
      Utils.log('未找到确认按钮');
    }
    Utils.log('任务执行完毕');
  }
};
module.exports = Logic;

入口/UI层 (main.js)

// 文档地址 https://docs.hamibot.com/
'ui';
var Logic = require('./logic.js');

ui.layout(
  <vertical padding="16">
    <button id="startBtn" text="开始运行" />
    <button id="stopBtn" text="停止脚本" />
  </vertical>
);

ui.startBtn.on('click', function() {
  threads.start(function() {
    Logic.runTask();
  });
});

ui.stopBtn.on('click', function() {
  engines.stopAll();
  toast('已停止');
});

3. 分层设计最佳实践

  • 严格单向依赖:入口层调用业务层,业务层调用工具层/配置层。禁止反向依赖或循环依赖,避免模块加载失败。
  • UI 与逻辑彻底解耦:UI 仅负责参数收集、按钮事件绑定和状态展示。所有耗时操作和自动化流程必须放在业务层,并通过 threads.start() 在子线程执行,防止阻塞 UI 线程导致界面无响应。
  • 模块化加载规范:Hamibot 支持 CommonJS 规范的 require()module.exports。确保所有脚本文件位于同一项目目录,使用相对路径(如 ./config.js)引入。
  • 异常隔离与重试:在业务层的关键步骤使用 try...catch 捕获异常,结合配置层的重试参数实现容错,避免单点故障导致整个脚本崩溃。
  • 配置外置:将易变参数(如应用包名、延迟时间、阈值)统一抽离到配置层。后续可直接对接 Hamibot 的脚本配置面板,无需修改核心代码。

按照此结构编写脚本,你在后续迭代、多设备适配或上传至 Hamibot 云端运行时,都能保持代码清晰且稳定。如需了解 threads 多线程调度或 Hamibot 配置面板的对接方法,可以继续提问。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 5 小时前

分层模块化后的脚本需要通过 ZIP 压缩包的形式上传至 Hamibot。云端运行环境会自动解压并按 require() 依赖关系加载模块。具体操作与规范如下:

1. 打包规范

  • 扁平化目录:将所有 .js 文件放在同一层级。压缩时直接选中所有文件右键压缩,不要包含外层文件夹,确保 ZIP 根目录直接是脚本文件。
  • 入口文件:必须保留一个明确的启动文件(通常命名为 main.js)。若使用 UI 模式,该文件首行必须保留 'ui';
  • 引用路径:模块间调用必须使用相对路径且携带 .js 后缀,例如 require('./config.js')。禁止使用绝对路径或省略后缀。
  • 清理冗余:ZIP 内仅保留 .js 文件,移除 .git.md、图片、日志、node_modules 等无关内容,避免体积超限或解析异常。

2. 上传步骤

  1. 在本地将整理好的脚本文件压缩为 .zip 格式。
  2. 登录 Hamibot 控制台,进入“我的脚本”页面。
  3. 点击“上传脚本”,选择生成的 ZIP 文件。
  4. 上传完成后,在脚本详情页的“运行配置”中,确认“入口文件”已正确指向 main.js(系统通常会自动识别,若未识别可手动填写)。
  5. 保存配置,即可在设备列表中分配机器人进行云端部署或手动运行。

3. 关键注意事项

  • 本地完整验证:上传前务必在本地 Hamibot App 中运行一次入口文件。可通过 engines.execScriptFile('./main.js') 模拟云端加载流程,确保所有模块路径解析正常、无循环依赖。
  • Rhino 引擎兼容:所有模块文件均需遵循 Rhino 1.7.15 语法规范。禁止使用箭头函数、函数默认参数等未完全兼容的 ES6+ 特性,建议统一使用 var 声明变量,否则云端执行会直接抛出语法错误。
  • 工作目录机制:云端解压后,脚本的工作目录即为 ZIP 根目录。engines.myEngine().cwd() 返回的路径与本地测试一致,相对路径引用可无缝迁移。
  • 配置面板联动:若需通过 Hamibot 控制台动态下发参数,可在入口层或配置层使用 hamibot.env 读取变量,并在控制台的“脚本配置”中定义对应字段,实现配置外置与云端管控。

按照上述规范打包上传,你的分层脚本即可在 Hamibot 云端稳定运行。如遇模块加载失败或路径报错,优先检查 ZIP 内部层级是否与 require() 路径完全匹配。需要进一步了解控制台配置面板的字段定义或云端日志排查方法,可随时告诉我。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实