五分钟!带你开发一个 VS Code 插件,实现状态栏文案轮播效果

手把手带你开发一个简单的 VS Code 插件!

以下是详细的步骤指南,以一个简单的状态栏轮播功能来开始VS Code 插件的学习吧~

功能概述:

  1. 在状态栏显示文案库中文案和emoji装饰
  2. 支持定时更新显示内容
  3. 提供配置选项控制更新频率

一、环境准备

  1. ​​安装 Node.js​​

    • 这就不啰嗦了
  2. ​​安装 Yeoman 和 VS Code 生成器​​

    css 复制代码
    npm install -g yo generator-code

二、创建项目

  1. ​​生成项目骨架​​

    css 复制代码
    yo code
    • 选择插件类型(通常选 New Extension)
    • 填写名称、描述等元信息(后续可修改)
    • 选择 TypeScript 或 JavaScript
  2. ​​项目结构说明​​

    bash 复制代码
    ├── .vscode/            # VS Code 调试配置
    ├── src/
    │   └── extension.ts    # 插件入口文件
    ├── package.json        # 插件清单
    ├── tsconfig.json       # TypeScript 配置
    └── CHANGELOG.md        # 更新日志

三、具体功能实现

  1. ​​修改 package.json​​

    • activationEvents: 定义插件何时被激活(如 onCommand)
    • contributes: 注册命令/菜单项/配置等
  2. ​​实现功能(JavaScript 示例)​​

    数据存储:
    • 使用cuteEmojis数组存储装饰性emoji

    • poemList数组存储大量精选语录文本

    • colors数组定义状态栏文本颜色选项

    js 复制代码
    const vscode = require('vscode');
    
    const cuteEmojis = ["🌸", "🐈", "🍬", "🌈", "🍭", "✨", "🎀", "⭐", "💫"];
    const poemList = [
        "如此年轻的我,很想要改变这个世界。",
        "我将继续寻找,就算这无尽的星辰,令我的寻找希望渺茫,就算我将单枪匹马。",
        "如果很容易实现的话,初心就不会这么珍贵。",
        "总有一天,你蜡烛的光会照耀到另外的人。",
        "人是有资格,陷在困局里的。",
        "我被森林包裹,我自林中坠落。",
        "于无声处听惊雷。",
        "实现梦想还要很久,巧了,我还有一生的时间。"
    ]
    
    const colors = ["#FF578C", "#D12020", "#589604", "#099687", "#3357FF", "#4E05A6", "#9C046F", "#06306F"];
    核心功能实现:
    • getRandomPoem()函数随机组合emoji和语录
    • 通过vscode.window.createStatusBarItem创建状态栏项
    • 使用setInterval实现定时更新功能
    js 复制代码
    /**
    * 随机获取一条带emoji装饰的语录
    * @returns {string} 返回格式为"emoji 语录"的字符串
    */
    function getRandomPoem() {
        const poemIndex = Math.floor(Math.random() * poemList.length);
        const emojiIndex = Math.floor(Math.random() * cuteEmojis.length);
        return `${cuteEmojis[emojiIndex]} ${poemList[poemIndex]}`;
    }
    
    /**
     * 插件激活函数
     * @param {vscode.ExtensionContext} context 扩展上下文
     */
    function activate(context) {
        console.log('Congratulations, your extension "he-said" is now active!');
        const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100);
        statusBarItem.text = getRandomPoem();
        statusBarItem.color = colors[Math.floor(Math.random() * colors.length)];
        statusBarItem.show();
    
        // 获取配置并设置初始定时器
        let updateInterval = vscode.workspace.getConfiguration('he-said').get('updateInterval') || 60;
        let interval = setInterval(updateStatusBar, updateInterval * 1000);
    
        // 配置变更监听器
        context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(e => {
        if (e.affectsConfiguration('he-said.updateInterval')) {
            clearInterval(interval);
            updateInterval = vscode.workspace.getConfiguration('he-said').get('updateInterval') || 60;
            interval = setInterval(updateStatusBar, updateInterval * 1000);
        }
    }));
    
    function updateStatusBar() {
        statusBarItem.text = getRandomPoem();
        statusBarItem.color = colors[Math.floor(Math.random() * colors.length)];
    }
    
    // 注册示例命令
    let disposable = vscode.commands.registerCommand('he-said.helloWorld', function () {
        // 显示信息提示框
        vscode.window.showInformationMessage('Hello World from he-said!');
    });
    
    // 在插件停用时清理资源
    context.subscriptions.push(disposable);
    context.subscriptions.push({
        dispose: () => {
            // 清除定时器
            clearInterval(interval);
            // 销毁状态栏项
            statusBarItem.dispose();
        }
    });
    }
    
    /**
     * 插件停用函数(当前无具体实现)
     */
    function deactivate() { }
    
    // 导出模块接口
    module.exports = {
        activate,  // 插件激活函数
        deactivate // 插件停用函数
    }
    配置管理:
    • 通过vscode.workspace.getConfiguration获取用户配置
    • 监听配置变更事件实现动态调整更新频率
    js 复制代码
        updateInterval = vscode.workspace.getConfiguration('he-said').get('updateInterval') || 60;

四、调试运行

  1. ​​按 F5 启动调试​​

    • 会自动打开一个新的 VS Code 窗口(扩展开发主机)
  2. ​​测试功能​​

    • 按 Ctrl+Shift+P 执行你的命令(如 "Say Hello")
    • 使用调试控制台查看日志输出

五、发布准备

  1. ​​打包插件​​

    go 复制代码
    npm install -g vsce
    vsce package

    生成 .vsix 文件

  2. ​​发布选项​​

六、示例源码和学习资源

  1. 示例源码
  2. 官方文档 - 必读
  3. 扩展示例库
  4. Extension API 参考

建议从简单功能开始,逐步扩展。做一些自己喜欢的功能,会增强兴趣 😜

相关推荐
Autumn_ing5 小时前
Design.md生成UI怎么验收?举例运营后台的颜色、状态和数据核对
前端·ui·ai·设计系统·paico·ai生成ui·design.md
keyipatience6 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
朱涛的自习室6 小时前
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)
android·前端·后端
java1234_小锋8 小时前
【技术专题】HTML5 网页技术 - HTML5简介 & HTML5 文档结构
前端·html·html5
鶴哥只手遮天9 小时前
Vue 3 核心源码深度剖析系列(v3.5.44)-第 1 章 项目全景:monorepo 架构与工程化体系
前端·vue.js·开源
流星。。方9 小时前
小团队官网SEO落地:前端语义化与静态生成的工程实践
前端·状态模式
用户530429765799 小时前
盘点危化品搬运诊断的6类工具与自处理边界判断
前端
curtain9 小时前
从古法编程到 Agent:我入行这两年,AI 改变了什么
前端·openai
zyfts9 小时前
10分钟自制Codex钉钉通知Skill:AI干完活自动钉钉提醒你
前端
大孜然9 小时前
孜然QQ频道自动化程序机器人配置教程
前端