avatar

麦兜的小站

MDO.INK

  • 首页
  • 随笔
  • 知识库
  • 归档
  • 动态
  • 标签
  • 关于
Home 试开发一款vscode插件(上)
文章

试开发一款vscode插件(上)

Posted 2025-03-5 Updated 2025-03- 5
By power 已删除用户
14~18 min read

今天就带大家伙简单了解和实验下,一款vscode插件的开发。放心,入门很简单,进阶才困难。

1、准备环境和初始化项目

安装脚手架,一会我们用yo来新建一个项目

 npm i  -g yo generator-code 

然后我们开始创建一下

yo code

选项默认yes和随便填写就行,后期能在项目里修改的,不过语言我选了javascript。

最终我的选择如下

2、准备开发

创建好的项目结构如下,最重要的是extension.js和packag.json

(1)extension.js

是我们新建的项目主函数功能,里面记载了触发插件后,该执行的函数逻辑,也是我们本期的写代码的地方。

const vscode = require('vscode');





 * @param {vscode.ExtensionContext} context
 */
function activate(context) {




    console.log('Congratulations, your extension "sanwu" is now active!');







    let disposable = vscode.commands.registerCommand('sanwu.helloWorld', function () {




        vscode.window.showInformationMessage('Hello World from count!');
    });

    context.subscriptions.push(disposable);
}


function deactivate() {}


module.exports = {
    activate,
    deactivate
}

(2)package.json

这里放置的是依赖包,命令,还有我们插件的基础配置(这个最重要),我尽量讲注释写的清楚些。

但是记得package.json里是不能这样写注释的,会导致转义错误。

{
  "name": "sanwu", // 插件名字
  "displayName": "count", // 插件展示名字
  "description": "sanwu.count demo", // 插件描述
  "version": "0.0.1",  // 插件版本
  "engines": {
    "vscode": "^1.71.0" // 最低兼容的vscode版本为1.17.0
  },
  "categories": [
    "Other" // 插件分类为其他
  ],

  "activationEvents": [
    "onCommand:sanwu.helloWorld" // 这里记载了插件的激活时机,比如这里是命令激活,可以有多种激活方式
  ],
  "main": "./extension.js", // 我们的主函数入口
  "contributes": {
    "commands": [
      {
        "command": "sanwu.helloWorld", // extension.js注册的命令要在这里声明
        "title": "Hello World" // 这里是输入命令的提示语句
      }
    ]
  },
  "scripts": {
    "lint": "eslint .",
    "pretest": "npm run lint",
    "test": "node ./test/runTest.js"
  },
  "devDependencies": {
    "@types/vscode": "^1.71.0",
    "@types/glob": "^7.2.0",
    "@types/mocha": "^9.1.1",
    "@types/node": "16.x",
    "eslint": "^8.20.0",
    "glob": "^8.0.3",
    "mocha": "^10.0.0",
    "typescript": "^4.7.4",
    "@vscode/test-electron": "^2.1.5"
  }
}

(3)运行尝试

进行调试模式,打开了一个新的vscode窗口 ctrl+shift+p 调出输入行,输入hello world,

就能触发以下结果。

(4)新增一个命令

我们在extension.js里activate函数里新增以下代码,注册新命令countTime

const countTime = vscode.commands.registerCommand('sanwu.countTime', function () {
        let i = 0
        setInterval(() => {
                i++
        }, 1000)

        vscode.window.setStatusBarMessage("设置状态栏的消息-----" +  '你已经浪费了' + i + 's在这里了,快去摸鱼!')
});

同时要在package.json里声明一下,主要是这两个地方

"activationEvents": [
    "onCommand:sanwu.helloWorld",
    "onCommand:sanwu.countTime" 
  ],
  "main": "./extension.js",
  "contributes": {
    "commands": [
      {
        "command": "sanwu.helloWorld",
        "title": "Hello World"
      },
      {
        "command": "sanwu.countTime", 
        "title": "countT" 
      }
    ]
  },

同样的,我们打开调试,输入countT

就能调用定时器,间隔1s地在状态栏输入文字啦

到这里我们已经安装好环境,新建好项目,还尝试运行了和新增了命令,下期我打算完善我的插件demo,功能大概就是监听打开vscode的时间,然后特定场景触发功能这样子,还需要给大家讲解如何打包和发布。

知识库
License:  CC BY 4.0
Share

Further Reading

Jul 31, 2025

如何实现接口幂等性

通俗的说,用户在系统中有操作,不管重复多少次,都应该产生一样的效果或返回一样的结果的。 幂等性的概念 幂等(Idempotent)是一个数学与计算机学的概念,常见于抽象代数中。 f(n)=1^n//无...

Jul 19, 2025

10个npm工具包

有了npm之后,前端人员真的是过上好日子了。我们可以直接把别人写好的工具包拿来用,非常的方便。 1.day.js-轻量日期处理 npminstalldayjs importdayjsfrom'd...

Jul 17, 2025

How to set up PHP7.4 on MacOS.

Thisisallverywellandgood.Apartfromonesmallinsignificantthing… TheversionofPHPinuseiscurrently7.4. Th...

OLDER

umami网站访问分析工具

NEWER

试开发一款vscode插件(中)

Recently Updated

  • 如何实现接口幂等性
  • 10个npm工具包
  • How to set up PHP7.4 on MacOS.
  • Automa:一键自动化,网页数据采集与工作流程优化专家Automa:解锁自动化
  • Mac 下用 brew 搭建 LNMP

Trending Tags

thinkphp clippings

Contents

©2025 麦兜的小站. Some rights reserved.

Using the Halo theme Chirpy