从零到一,用 Vue 3 + Vite 打造你的第一个 uTools 插件

文章目录

摘要
1. 引言:为什么选择为 uTools 开发插件?
2. 技术选型:Vue 3 + Vite
3. uTools 插件核心概念解析

3.1. `plugin.json`:插件的“身份证”
3.2. `preload.js`:连接前端与 uTools 的桥梁

4. 项目结构搭建
5. 核心功能实现

5.1. 前端界面 (`App.vue`)
5.2. 核心命名引擎 (`services.js`)

6. 开发与调试
7. 总结

摘要

本文将通过一个实战项目——规范命名助手,带你从零开始,一步步学习如何使用现代前端技术栈(Vue 3 + Vite)为 uTools 平台开发一款实用、美观且功能强大的插件。你将学到 uTools 插件的核心概念、项目搭建、功能实现、与 uTools API 的交互,以及最终的打包发布流程。

关键词:uTools, 插件开发, Vue 3, Vite, JavaScript, 前端实战


1. 引言:为什么选择为 uTools 开发插件?

uTools 是一个极客范的生产力工具集,它通过插件化的方式,将各种常用工具(如翻译、截图、计算器等)聚合在一起,极大地提升了我们的工作效率。为 uTools 开发插件,不仅能解决自己工作流中的痛点,还能将自己的创意分享给广大的 uTools 用户,非常有成就感。

本文将以我开发的“规范命名助手”为例,详细讲解 uTools 插件的开发全过程。这个插件旨在解决程序员日常开发中的一大“难题”——命名。它能根据中文含义,智能生成符合多种编程语言规范的变量、函数、类名等。

2. 技术选型:Vue 3 + Vite

为什么选择 Vue 3 和 Vite 作为我们的技术栈?

Vite:提供了闪电般的冷启动和极速的热模块更新(HMR),这对于需要频繁调试的插件开发来说,体验极佳。
Vue 3:其 Composition API 使得代码逻辑组织更加清晰,响应式系统也更加高效,非常适合构建复杂的交互界面。

这套组合不仅开发体验好,而且打包后的体积小、性能高,非常适合 uTools 这种轻量级的插件平台。

3. uTools 插件核心概念解析

在开始编码之前,我们必须理解 uTools 插件的两个核心文件:plugin.jsonpreload.js

3.1. plugin.json:插件的“身份证”

这个文件是插件的清单文件,用于向 uTools 声明插件的基本信息、功能、入口等。我们的“规范命名助手”的配置如下:

{
  "main": "index.html",
  "preload": "preload/services.js",
  "logo": "logo.png",
  "development": {
    "main": "http://localhost:5173"
  },
  "features": [
    {
      "code": "naming",
      "explain": "规范命名助手 - 智能生成符合编程规范的变量、函数、类名",
      "cmds": [
        "命名",
        "规范命名",
        "naming"
      ]
    }
  ]
}

main: 插件主界面的入口文件,这里指向 Vite 打包生成的 index.html
preload: 预加载脚本,这是插件的“后端”,负责处理核心逻辑和与 uTools API 的交互。
development.main: 开发模式下的入口,指向 Vite 的开发服务器地址。
features: 定义插件的功能。每个功能有一个唯一的 code,一个 explain(解释),以及一组 cmds(命令)。用户通过这些命令来唤起你的插件。

3.2. preload.js:连接前端与 uTools 的桥梁

preload.js 运行在 Node.js 环境中,拥有完整的 Node.js API 权限,并且可以访问 uTools 提供的所有 API。它通过 window 对象向前端页面(运行在浏览器环境中)暴露方法和数据。

在我们的项目中,preload/services.js 就是这个角色。它定义了 NamingEngine 类,负责所有命名的计算和 AI 调用逻辑,并将其挂载到 window.services 上,供 App.vue 调用。

// preload/services.js

class NamingEngine {
  // ... 命名转换、AI调用等核心逻辑
}

window.services = {
  namingEngine: new NamingEngine(),
  getNamingSuggestions: async (desc, type, lang) => {
    return window.services.namingEngine.generateAISuggestions(desc, type, lang);
  },
  // ... 其他暴露给前端的方法
};

4. 项目结构搭建

一个清晰的项目结构是高效开发的基础。我们的项目结构如下:

standardized-naming-assistant/
├── public/                  # uTools 插件的静态资源
│   ├── plugin.json          # 插件配置
│   ├── preload/             # 预加载脚本目录
│   │   └── services.js      # 核心命名服务
│   └── logo.png             # 插件图标
├── src/                     # Vue 应用源码
│   ├── App.vue              # 主应用组件
│   ├── main.js              # Vue 应用入口
│   └── main.css             # 全局样式
├── package.json             # 项目配置
└── vite.config.js           # Vite 配置

5. 核心功能实现

5.1. 前端界面 (App.vue)

前端使用 Vue 3 的 Composition API 来组织代码,使得状态管理和逻辑复用变得非常简单。

响应式数据:使用 ref 来定义所有需要动态更新的数据,如输入框内容、建议列表、加载状态等。
用户交互:通过 @click@input 等事件监听用户的操作,并调用相应的方法。
preload 通信:直接通过 window.services 对象调用在 preload.js 中暴露的方法,获取命名建议。

<script setup>
import { ref } from 'vue';

const namingRequirement = ref('');
const suggestions = ref([]);
const loading = ref(false);

const getNamingSuggestions = async () => {
  if (!namingRequirement.value.trim()) return;
  loading.value = true;
  try {
    // 直接调用 preload 中暴露的方法
    const newSuggestions = await window.services.getNamingSuggestions(
      namingRequirement.value,
      selectedType.value,
      selectedLanguage.value
    );
    suggestions.value = newSuggestions;
  } finally {
    loading.value = false;
  }
};
</script>

<template>
  <!-- ... 模板代码 ... -->
  <input v-model="namingRequirement" @input="getNamingSuggestions" />
  <!-- ... 显示建议列表 ... -->
</template>

5.2. 核心命名引擎 (services.js)

这是插件的大脑。它不仅实现了多种命名风格(如 camelCase, PascalCase, snake_case)的转换算法,还集成了 uTools 的 AI 能力,提供更智能的命名建议。

命名风格转换:使用正则表达式和字符串操作实现各种 case 之间的转换。
调用 uTools AI:通过 utools.ai.ask 方法,将用户的命名需求发送给 AI,并解析返回的结果。
失败回退:当 AI 调用失败或返回结果不理想时,优雅地回退到本地的、基于规则的命名生成逻辑,保证插件的可用性。

// preload/services.js

class NamingEngine {
  convertCase(text, style) { /* ... */ }

  async generateAISuggestions(description, type, language) {
    try {
      // 检查 uTools AI 是否可用
      if (!window.utools || !window.utools.ai) {
        return this.generateLocalSuggestions(description, type, language);
      }
      const prompt = this.buildAIPrompt(description, type, language);
      const response = await window.utools.ai({ messages: [{ role: 'user', content: prompt }] });
      // ... 解析和处理 AI 响应 ...
    } catch (error) {
      // ... 错误处理和回退逻辑 ...
    }
  }
}

6. 开发与调试

安装依赖npm install
启动开发服务npm run dev
加载插件:打开 uTools,进入开发者工具,选择“加载本地插件”,指向你的项目根目录。

现在,你可以在 uTools 主输入框中输入“命名”等关键词来唤起你的插件了。所有对代码的修改都会通过 Vite 的 HMR 实时反映在插件界面上,非常方便。

7. 总结

通过“规范命名助手”这个项目,我们完整地体验了使用 Vue 3 + Vite 开发 uTools 插件的全过程。核心要点可以总结为:

plugin.json 定义插件的元信息和入口。
preload.js 作为后端,处理核心逻辑,并作为前端与 uTools API 的桥梁。
Vite 提供了无与伦比的开发体验。
Vue 3 让构建交互式界面变得简单而高效。

实现效果:
图片[1] - 从零到一,用 Vue 3 + Vite 打造你的第一个 uTools 插件 - 宋马
删除线格式
市场截图:

希望这篇博文能帮助你开启自己的 uTools 插件开发之旅。快去创造属于你的高效工具吧!

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容