【vscode自定义插件】一、Node版本一键切换

vscode插件介绍

vscode插件能做的事大家应该都不陌生,比如常用的ESLintPrettier等,这些插件提高了我们的开发效率。我们通过学习也是能够开发出类似功能的插件,因为vscode是由Electron开发的,其插件的实现方式主要就是js+html等前端技术实现。其插件发布方式也是类似于npm,只不过是具有一定的规范的vsix文件。这些技术作为一名前端开发来说都是耳熟能详的技能,我们要做的就是学习vscode提供的api并将以实现。
搭建插件的工程、开发流程、发包流程都可以在网上找到,这里就不细说了。
附上我开发插件时参考的部分资料与博客: 官网VSCode插件开发全攻略

插件开发背景

项目组内有不同的项目,依赖不同的node版本,使用了nvm来做版本管理。每次切换项目,运行项目都要执行nvm list nvm use [version] 虽然就两行,但一天多的时候要输十几遍,属实麻烦。在这里插入图片描述
想着能不能利用插件达到一键切换的功能。
那么插件要做的事就两步,一是通过nvm list获取到安装的node各个版本、二是执行一下 nvm use [version]
最后实现的效果如下:
1.在某个文件右键选择切换Node
在这里插入图片描述
2.展示当前安装的Node版本和当前选择的Node版本在这里插入图片描述
3.选择要切换的版本,成功后提示
在这里插入图片描述

代码实现

1、把功能入口加入右键菜单。

// package.json 部分代码
{
	"contributes": {
		// 注册指令
		"commands": [
			{
        		"command": "demo.changeNode",
        		"title": "切换Node"
      		}
		],
		"menus":{
		 	// 设置指令在文件上右键出现
			"explorer/context": [
				{
          			"command": "demo.changeNode",
         			 "group": "2_demo@1",
          			"when": "explorerResourceIsFolder"
        		}
        	]
		}
	}
}

2.编写指令代码,利用vscodeApi完成交互

// extension.js
const vscode = require('vscode')
const { getNodeAllVersion, switchNode } = require('./util/switchNodeVersionByNvm')
/**
 * @param {vscode.ExtensionContext} context
 */
function activate(context) {
  context.subscriptions.push(
    vscode.commands.registerCommand('demo.changeNode', async () => {
      const list = await getNodeAllVersion()
      // vscode api 展示快捷选项
      const chosen = await vscode.window.showQuickPick(list, {
        placeHolder: '选择需要切换的Node版本'
      })
      try {
        const result = await switchNode(chosen.label)
         // vscode api 展示Info提示
        vscode.window.showInformationMessage(result)
      } catch (e) {
      	// vscode api 展示Info提示
        vscode.window.showErrorMessage(e)
      }
    })
  )
}
// this method is called when your extension is deactivated
function deactivate() {}

module.exports = {
  activate,
  deactivate
}

3.完善getNodeAllVersion, switchNode代码逻辑。

const exec = require('child_process').exec //引入子线程模块
/**
 * 获取node所有版本
 */
const getNodeAllVersion = () => {
  return new Promise((resolve, reject) => {
    exec(`nvm list`, (error, stdout) => {
      if (!error) {
        if (stdout) {
          const version = stdout.match(/([1-9]\d|[1-9])(.([1-9]\d|\d)){2}/g)
          const currentVersionIdx = stdout.split('\n').findIndex(i => i.includes('*')) - 1
          if (version?.length > 0) {
            resolve(
              version.map((e, i) => {
                return {
                  label: e,
                  description: i === currentVersionIdx ? '(当前选择)' : ''
                }
              })
            )
          } else {
            reject('请安装nvm并使用nvm安装node!')
          }
        }
      } else {
        reject(error)
      }
    })
  })
}
/**
 * 切换Node版本
 * @param {string} version node版本号
 */
const switchNode = version => {
  return new Promise((resolve, reject) => {
    exec(`nvm use ${version}`, (error, stdout) => {
      if (!error) {
        resolve(stdout)
      } else {
        reject(error)
      }
    })
  })
}
module.exports = { getNodeAllVersion, switchNode }

node的子进程exec模块可以帮助我们在代码中执行命令行命令,核心就是利用这个功能对nvm list nvm use进行插件封装。

总结

vscode插件开发按照模板即可开发,重点是要识别插件的使用背景并开发其中核心功能。虽然只是一个简简单单的node切换功能,但他也确实给我们团队带来了效率的提升。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 要在VSCode降低Node版本,你可以按照以下步骤进行操作。首先,你需要安装一个工具,比如gnvm,它可以帮助你管理多个Node版本。你可以使用以下命令安装gnvm并安装所需的Node版本:\[2\] 1. 打开终端或命令提示符。 2. 使用以下命令安装gnvm:gnvm install latest(安装最新版本Node)或gnvm install 10.0.0(安装指定版本Node)。 3. 使用gnvm update latest命令更新本地的latest Node版本。 另外,如果你的VSCode没有按照默认路径安装,而是安装在D盘,你还需要将可执行程序Code.exe复制到路径"C:\Users\xxxxx\AppData\Local\Programs\Microsoft VS Code"下,这样软件才能够自动更新。\[3\] 希望这些步骤能够帮助你降低VSCodeNode版本。如果你有任何其他问题,请随时提问。 #### 引用[.reference_title] - *1* [解决:完全卸载 VsCode node 的问题(因版本过高而卸载)](https://blog.csdn.net/weixin_43405300/article/details/129213043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [node版本切换node版本更新及降低版本](https://blog.csdn.net/weixin_38959210/article/details/121856587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [VSCode自动更新后关闭,重新打开后版本自动降级](https://blog.csdn.net/fx714848657/article/details/127269732)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值