【vscode自定义插件】四、Node版本自动切换

插件开发背景

之前实现过利用插件实现手动一键切换node版本,具体可以参考之前的文章
【vscode自定义插件】一、Node版本一键切换
在这里插入图片描述
用了一段时间也反馈也挺好的,但是有的小伙伴说了,这样我也嫌麻烦,有没有办法自动切换呢?
经过钻研了几天的官方文档,最后给出答案:能!

实现过程

要实现自动切换,首先得实现真正的一键切换,之前的一键切换功能,在点击切换node命令后还得再次选择要切换的node版本,才能切换到对应的版本。

获取node版本实现一键切换node版本

那么要实现对应项目一键切换到对应node上去,那就得知道项目使用的node版本,得有一个项目与node版本的映射关系。这里有几个方法

  1. 每个项目中放入node版本的配置信息,插件进行读取获取对应关系。
  2. 维护一个映射表,维护管理项目名称与node版本的关系。
    为了不对原来代码进行改动,并且插件其实自带了配置功能,这里使用的是第二种方式。
    首先在package.json文件中添加配置
 "configuration":{
 	"title": "my-code",
	"properties": {
		"demo.nodeMap": {
			"type": "object",
			"default": {
            	"xxxx1": "14.00.0",
            	"xxxx2": "12.00.0",
            	"xxxx3": "16.00.0"
          },
          	"description": "工程名及对应node版本"
		}
	}
 }

并创建一个demo.quickChangeNode的指令,配置的格式也可以看之前的文章~
在extension.js入口文件中实现该指令。
因为之前Node版本一键切换文章中已经实现了switchNode的方法,只需要读取配置的node版本调用该方法传入版本号即可。

代码实现

context.subscriptions.push(
    vscode.commands.registerCommand('demo.quickChangeNode', async () => {
    // vscode.workspace.getConfiguration().get(xx)可以读取到插件的配置项
      const nodeConfig = vscode.workspace.getConfiguration().get('demo.nodeMap')
      // productName在activate钩子中的context参数中可以解析出来,拿到包名称就行了,最后在映射表中拿到对应的node版本就大功告成
      const nodeVersion = nodeConfig[productName] || ''
      if (nodeVersion) {
        try {
        // 调用之前实现过切换node版本的方法,具体实现方式可以参考之前的文章
          const result = await switchNode(nodeVersion)
          vscode.window.showInformationMessage(result)
        } catch (e) {
          vscode.window.showErrorMessage(e)
        }
      }
    })
  )

绑定快捷键

package.json文件中可以将命令绑定到键盘快捷键上,这样可以一键执行命令

  "keybindings": [
      {
        "command": "demo.quickChangeNode",
        "key": "Ctrl+Alt+N"
      }
    ]

这样我们使用`Ctrl+Alt+N``快捷键就能一键执行切换node了

自动执行命令

创建自动执行插件命令方法

/**
 * @descriptions 自动执行命令
 * @param command vscode命令
 * @param condition 执行条件
 * @param safetyDelay 执行命令延迟时间,默认3s
 */
const autoExecuteCommand = (command, condition, safetyDelay = 3000) => {
  if (condition && command) {
    setTimeout(() => {
    // 执行命令api
      vscode.commands.executeCommand(command)
    }, safetyDelay)
  }
}

在extension.js入口文件的activite钩子中执行

autoExecuteCommand(
    'demo.quickChangeNode',
    // 这里利用配置实现了一个是否开启自动切换node的开关
    vscode.workspace.getConfiguration().get('demo.isAutoChangeNode')
  )

为了避免首次运行切换时,项目还没加载好,这里特意给了一个3s延迟,这个可以根据项目启动时间来调整

结果展示

当打开一个项目时,无需操作自动切换到对应的node版本。
在这里插入图片描述
当打开多个项目时,切回原有项目时也可以通过键盘快捷键Ctrl+Alt+N实现一键切换node版本,到此大功告成

ps:不知道大家是否需要直接使用这个功能的插件,如有需求我可以抽空做个放到市场上去~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值