一、翻书前说两句
- 听说utools是一个很不错的桌面工具,可以利用javascript、html、css等技术去开发插件,公司测试大佬都推荐使用。本人用了一段时间上面的插件,像everything和在线翻译,都挺好用,但是别人的插件永远不能满足自己,所以呀,自定义的插件才能满足自己。之前一直都没有写东西的习惯,太忙没空写,太简单没有写的必要...种种借口,借此,通过记录学习日记来巩固对utools的理解和养成写笔记的习惯。本篇文笔会比较差,内容也不会特别细,凑合着看吧-_-~
二、插件开发简介
- 先贴一个官方文档,学什么东西,只要有个官方文档,就稳一半。文档里的插件开发,简单通俗易懂,一个hello示例一跑就通了,没啥难点,也费事搬运被文档内容了。
- 说说目录结构,最简单的就是一个plugin.json和其main字段对应的入口文件"index.html",plugin.json是一个配置文件,调出指令、入口文件等属性都是在这里配的,其他参数和具体的作用可以直接看文档内容,这里就不一一阐述。
{
"pluginName": "helloWorld",
"description": "我的第一个uTools插件",
"preload": "preload.js",
"main": "index.html",
"version": "0.0.1",
"features": [
{
"code": "helloWorld",
"explain": "helloWorld",
"cmds":["hello", "你好"]
}
]
}
- 官方文档还提供了模板插件,能直接跳过html的前端设计,对非前端开发的选手,这是一个不错的选择,能省事不少。这个文档也有例子,不过我这边重点不是用这个开发,是主要直接用preload.js来自定义我的插件。
三、preload.js
- 该文件是预加载的脚本,只需要在plugin.json的preload字段进行配置便可。该脚本的优势在于可以在该脚本中访问nodejs、electron、uTools提供的api。可以利用这个文件去加载自己的代码,在别的地方去调用。
- 在跑示例的时候发现一个小坑:插件代码preload.js里require的当前路径,并非preload.js所在目录,而是C:\Users\Administrator\AppData\Local\Programs\utools;如果要加载preload.js所在目录的文件,需要用到绝对路径,这个不是很合理,解决的方法是通过node.js的__dirname属性,在preload.js加载的时候去锁定preload的绝对位置,目前也没想到其他更好的方法。
const REAL_PATH_DIR = __dirname+"/"
window.MOD = [];
MOD.FILE_SYS = require('fs')
let GLOBAL_CONFIG = [
{modName:"test",filePath:"test.js"},
]
function loadMod(modName,filePath) {
let newMod = require(filePath);
if (newMod){
if (newMod.__init__) {
newMod.__init__();
}
MOD[modName] = newMod;
}
else{
console.log("----load mod error ----",filePath);
}
}
function init(){
for(let i = 0,len = GLOBAL_CONFIG.length; i < len; i++){
let info = GLOBAL_CONFIG[i];
loadMod(info.modName,REAL_PATH_DIR+info.filePath);
}
}
init();