Wox的核心竞争力在于其强大的插件扩展能力。无论你是想集成内部工具、自动化工作流,还是为特定场景定制搜索功能,开发Wox插件都是提升Windows效率的终极方案。本文将带你从零开始,创建并发布你的第一个Wox插件。
Wox v2支持Node.js和Python两种主流开发语言,开发者可根据技术栈选择:
一个标准的Wox插件包含以下核心组件:
my-wox-plugin/
├── plugin.json # 插件元数据与配置
├── main.js (或 main.py) # 主逻辑入口
├── icons/ # 图标资源
│ └── app.png
└── README.md # 使用说明
这是Wox识别插件的关键文件,定义了插件的基本信息和入口:
{
"Name": "MyFirstPlugin",
"Version": "1.0.0",
"Author": "YourName",
"Description": "我的第一个Wox插件",
"Website": "https://github.com/yourname/my-wox-plugin",
"Entry": "main.js",
"Icon": "icons/app.png",
"Commands": [
{
"Command": "my",
"Description": "触发词:输入my激活插件"
}
]
}
假设你是开发者,经常需要在不同项目间切换。我们将创建一个插件,输入项目名称关键词即可快速打开对应文件夹。
# 创建项目目录
mkdir wox-project-launcher
cd wox-project-launcher
# 初始化Node.js项目
pnpm init
# 安装Wox插件SDK(如需要额外依赖)
pnpm add @wox-launcher/wox-plugin
const { WoxPlugin } = require('@wox-launcher/wox-plugin');
const path = require('path');
const fs = require('fs');
// 项目路径映射(实际应用中可从配置文件读取)
const projects = {
'website': 'D:\\Projects\\company-website',
'api': 'D:\\Projects\\backend-api',
'docs': 'D:\\Projects\\documentation',
'wox': 'C:\\Users\\YourName\\Projects\\wox-plugin'
};
class ProjectLauncher extends WoxPlugin {
async query(query) {
const keyword = query.toLowerCase();
const results = [];
// 模糊匹配项目
for (const [name, projectPath] of Object.entries(projects)) {
if (name.includes(keyword) || keyword === '') {
results.push({
Title: `打开项目: ${name}`,
SubTitle: projectPath,
Icon: 'icons/folder.png',
Action: () => {
// 使用系统默认方式打开文件夹
require('child_process').exec(`start "" "${projectPath}"`);
}
});
}
}
return results;
}
}
module.exports = ProjectLauncher;
Wox v2提供热重载功能,极大提升开发效率:
pnpm run dev启动开发模式为结果项添加右键菜单选项:
results.push({
Title: `打开项目: ${name}`,
SubTitle: projectPath,
ContextMenu: [
{
Title: '在VS Code中打开',
Action: () => exec(`code "${projectPath}"`)
},
{
Title: '在终端中打开',
Action: () => exec(`wt -d "${projectPath}"`)
},
{
Title: '复制路径',
Action: () => clipboard.writeText(projectPath)
}
]
});
对于耗时操作(如API调用),使用异步避免阻塞主线程:
async query(query) {
// 显示加载状态
this.showLoading();
// 异步获取数据
const data = await fetchProjectData(query);
return data.map(item => ({
Title: item.name,
SubTitle: `最后修改: ${item.lastModified}`,
Icon: item.icon
}));
}
允许用户自定义项目路径:
// 读取用户配置
const settings = await this.loadSettings();
const projects = settings.projects || defaultProjects;
// 在plugin.json中定义设置UI
"Settings": [
{
"Name": "projects",
"Type": "textarea",
"Label": "项目列表(JSON格式)",
"DefaultValue": "{}"
}
]
# 打包为.wox文件(实际为zip格式)
zip -r MyProjectLauncher.wox plugin.json main.js icons/
# 或直接拖放文件夹到Wox窗口安装
开发Wox插件不仅是技术实践,更是参与开源社区的方式。你的插件可能解决数千用户的特定需求。访问Wox官网获取最新开发文档,加入开发者社区,让你的效率工具惠及更多人。
开启你的效率之旅