插件开发背景
之前实现过利用插件实现手动一键切换node版本,具体可以参考之前的文章
【vscode自定义插件】一、Node版本一键切换
用了一段时间也反馈也挺好的,但是有的小伙伴说了,这样我也嫌麻烦,有没有办法自动切换呢?
经过钻研了几天的官方文档,最后给出答案:能!
实现过程
要实现自动切换,首先得实现真正的一键切换,之前的一键切换功能,在点击切换node命令后还得再次选择要切换的node版本,才能切换到对应的版本。
获取node版本实现一键切换node版本
那么要实现对应项目一键切换到对应node上去,那就得知道项目使用的node版本,得有一个项目与node版本的映射关系。这里有几个方法
- 每个项目中放入node版本的配置信息,插件进行读取获取对应关系。
- 维护一个映射表,维护管理项目名称与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:不知道大家是否需要直接使用这个功能的插件,如有需求我可以抽空做个放到市场上去~