五分钟!带你开发一个 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 参考

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

相关推荐
站在风口的猪110832 分钟前
《前端面试题:CSS预处理器(Sass、Less等)》
前端·css·html·less·css3·sass·html5
程序员的世界你不懂1 小时前
(9)-Fiddler抓包-Fiddler如何设置捕获Https会话
前端·https·fiddler
MoFe11 小时前
【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
java·前端·.netcore
去旅行、在路上2 小时前
chrome使用手机调试触屏web
前端·chrome
Aphasia3112 小时前
模式验证库——zod
前端·react.js
lexiangqicheng3 小时前
es6+和css3新增的特性有哪些
前端·es6·css3
拉不动的猪3 小时前
都25年啦,还有谁分不清双向绑定原理,响应式原理、v-model实现原理
前端·javascript·vue.js
烛阴4 小时前
Python枚举类Enum超详细入门与进阶全攻略
前端·python
孟孟~4 小时前
npm run dev 报错:Error: error:0308010C:digital envelope routines::unsupported
前端·npm·node.js
孟孟~4 小时前
npm install 报错:npm error: ...node_modules\deasync npm error command failed
前端·npm·node.js